{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 基于改进 ResNet18 的 CIFAR-10 图像分类任务:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. 导入库与基础设置"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecutionIndicator": {
     "show": true
    },
    "execution": {
     "iopub.execute_input": "2025-08-23T10:23:13.480710Z",
     "iopub.status.busy": "2025-08-23T10:23:13.480595Z",
     "iopub.status.idle": "2025-08-23T10:23:16.285667Z",
     "shell.execute_reply": "2025-08-23T10:23:16.285162Z",
     "shell.execute_reply.started": "2025-08-23T10:23:13.480696Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "使用设备: cuda\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "import numpy as np\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "from torch.utils.data import Dataset, DataLoader, random_split\n",
    "from torchvision import transforms, datasets, models\n",
    "from torchvision.transforms import functional as F\n",
    "from torchvision.models import resnet18, ResNet18_Weights\n",
    "from sklearn.utils.class_weight import compute_class_weight\n",
    "import matplotlib.pyplot as plt\n",
    "from tqdm import tqdm\n",
    "from tensorboardX import SummaryWriter\n",
    "import cv2\n",
    "from PIL import Image\n",
    "import random\n",
    "from torchsummary import summary\n",
    "\n",
    "# 配置字体：优先使用文泉驿微米黑，其次正黑，确保中文显示\n",
    "plt.rcParams[\"font.family\"] = [\"sans-serif\"]\n",
    "plt.rcParams[\"font.sans-serif\"] = [\"DejaVu Sans\", \"Arial\", \"Helvetica\"]  # 系统通常预装的字体\n",
    "plt.rcParams[\"axes.unicode_minus\"] = False  # 解决负号显示为方块的问题\n",
    "\n",
    "# 设置随机种子，保证结果可复现\n",
    "seed = 42\n",
    "torch.manual_seed(seed)\n",
    "torch.cuda.manual_seed(seed)\n",
    "np.random.seed(seed)\n",
    "random.seed(seed)\n",
    "torch.backends.cudnn.deterministic = True\n",
    "\n",
    "# 设备配置\n",
    "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
    "print(f\"使用设备: {device}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. 半监督学习数据增强器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-08-23T10:23:16.286927Z",
     "iopub.status.busy": "2025-08-23T10:23:16.286526Z",
     "iopub.status.idle": "2025-08-23T10:23:16.291423Z",
     "shell.execute_reply": "2025-08-23T10:23:16.290615Z",
     "shell.execute_reply.started": "2025-08-23T10:23:16.286912Z"
    }
   },
   "outputs": [],
   "source": [
    "# 半监督学习专用数据增强器（区分弱增强和强增强）\n",
    "class SemiSupervisedAugmenter:\n",
    "    def __init__(self):\n",
    "        # 强增强：用于无标签数据的强扰动（增加多样性）\n",
    "        self.strong_aug = transforms.Compose([\n",
    "            transforms.RandomCrop(32, padding=4),  # CIFAR-10图像尺寸为32x32\n",
    "            transforms.RandomHorizontalFlip(),\n",
    "            transforms.RandomRotation(15),\n",
    "            transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2),\n",
    "            transforms.ToTensor(),\n",
    "            transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2470, 0.2435, 0.2616))  # CIFAR-10均值和标准差\n",
    "        ])\n",
    "        \n",
    "        # 弱增强：用于无标签数据的轻微扰动（保留核心特征）\n",
    "        self.weak_aug = transforms.Compose([\n",
    "            transforms.RandomCrop(32, padding=4),\n",
    "            transforms.RandomHorizontalFlip(),\n",
    "            transforms.ToTensor(),\n",
    "            transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2470, 0.2435, 0.2616))\n",
    "        ])\n",
    "    \n",
    "    def __call__(self, x):\n",
    "        # 输入PIL图像，返回弱增强和强增强后的张量\n",
    "        weak_x = self.weak_aug(x)\n",
    "        strong_x = self.strong_aug(x)\n",
    "        return weak_x, strong_x"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. CBAM 注意力模块（通道 + 空间注意力）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-08-23T10:23:16.292477Z",
     "iopub.status.busy": "2025-08-23T10:23:16.292238Z",
     "iopub.status.idle": "2025-08-23T10:23:16.299680Z",
     "shell.execute_reply": "2025-08-23T10:23:16.299270Z",
     "shell.execute_reply.started": "2025-08-23T10:23:16.292454Z"
    }
   },
   "outputs": [],
   "source": [
    "# 通道注意力：关注\"哪些通道的特征更重要\"\n",
    "class ChannelAttention(nn.Module):\n",
    "    def __init__(self, in_channels, reduction_ratio=16):\n",
    "        super(ChannelAttention, self).__init__()\n",
    "        self.avg_pool = nn.AdaptiveAvgPool2d(1)  # 全局平均池化\n",
    "        self.max_pool = nn.AdaptiveMaxPool2d(1)  # 全局最大池化\n",
    "        \n",
    "        # 压缩-激励结构（通过1x1卷积实现通道降维与升维）\n",
    "        self.fc = nn.Sequential(\n",
    "            nn.Conv2d(in_channels, in_channels // reduction_ratio, 1, bias=False),\n",
    "            nn.ReLU(),\n",
    "            nn.Conv2d(in_channels // reduction_ratio, in_channels, 1, bias=False)\n",
    "        )\n",
    "        self.sigmoid = nn.Sigmoid()  # 输出通道权重（0-1之间）\n",
    "    \n",
    "    def forward(self, x):\n",
    "        avg_out = self.fc(self.avg_pool(x))  # 平均池化分支\n",
    "        max_out = self.fc(self.max_pool(x))  # 最大池化分支\n",
    "        out = avg_out + max_out  # 融合两个分支\n",
    "        return self.sigmoid(out) * x  # 权重与输入特征相乘\n",
    "\n",
    "\n",
    "# 空间注意力：关注\"特征图中哪些位置更重要\"\n",
    "class SpatialAttention(nn.Module):\n",
    "    def __init__(self, kernel_size=3):\n",
    "        super(SpatialAttention, self).__init__()\n",
    "        # 卷积层：融合通道维度的平均和最大特征\n",
    "        self.conv1 = nn.Conv2d(2, 1, kernel_size, padding=kernel_size//2, bias=False)\n",
    "        self.sigmoid = nn.Sigmoid()  # 输出空间权重（0-1之间）\n",
    "    \n",
    "    def forward(self, x):\n",
    "        avg_out = torch.mean(x, dim=1, keepdim=True)  # 通道维度平均\n",
    "        max_out, _ = torch.max(x, dim=1, keepdim=True)  # 通道维度最大\n",
    "        x_cat = torch.cat([avg_out, max_out], dim=1)  # 拼接为2通道特征\n",
    "        x_out = self.conv1(x_cat)  # 卷积压缩为1通道\n",
    "        return self.sigmoid(x_out) * x  # 权重与输入特征相乘\n",
    "\n",
    "\n",
    "# CBAM模块：先通道注意力，再空间注意力\n",
    "class CBAM(nn.Module):\n",
    "    def __init__(self, in_channels):\n",
    "        super(CBAM, self).__init__()\n",
    "        self.channel_attention = ChannelAttention(in_channels)\n",
    "        self.spatial_attention = SpatialAttention()\n",
    "    \n",
    "    def forward(self, x):\n",
    "        x = self.channel_attention(x)  # 先优化通道权重\n",
    "        x = self.spatial_attention(x)  # 再优化空间权重\n",
    "        return x"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4. 改进的 ResNet18（嵌入 CBAM 注意力）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecutionIndicator": {
     "show": true
    },
    "execution": {
     "iopub.execute_input": "2025-08-23T10:23:16.300297Z",
     "iopub.status.busy": "2025-08-23T10:23:16.300167Z",
     "iopub.status.idle": "2025-08-23T10:23:16.305703Z",
     "shell.execute_reply": "2025-08-23T10:23:16.305309Z",
     "shell.execute_reply.started": "2025-08-23T10:23:16.300285Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# 适配CIFAR-10的ResNet18，加入CBAM注意力模块\n",
    "class ResNet18WithCBAM(nn.Module):\n",
    "    def __init__(self, num_classes=10, pretrained=True):\n",
    "        super(ResNet18WithCBAM, self).__init__()\n",
    "        # self.resnet = models.resnet18(pretrained=pretrained)  # 加载预训练ResNet18\n",
    "        if pretrained:\n",
    "            self.resnet = resnet18(weights=ResNet18_Weights.IMAGENET1K_V1)  # 加载ImageNet预训练权重\n",
    "        else:\n",
    "            self.resnet = resnet18(weights=None)  # 不加载预训练权重\n",
    "        \n",
    "        # 调整输入层以适配CIFAR-10（32x32，原ResNet18适配224x224）\n",
    "        self.resnet.conv1 = nn.Conv2d(\n",
    "            3, 64, kernel_size=3, stride=1, padding=1, bias=False  # 小卷积核+无池化，保留特征\n",
    "        )\n",
    "        self.resnet.maxpool = nn.Identity()  # 移除最大池化层（避免特征尺寸过小）\n",
    "        \n",
    "        # 在每个残差块的BN层后插入CBAM（按通道数匹配）\n",
    "        self.resnet.layer1[0].bn2 = nn.Sequential(self.resnet.layer1[0].bn2, CBAM(64))\n",
    "        self.resnet.layer1[1].bn2 = nn.Sequential(self.resnet.layer1[1].bn2, CBAM(64))\n",
    "        \n",
    "        self.resnet.layer2[0].bn2 = nn.Sequential(self.resnet.layer2[0].bn2, CBAM(128))\n",
    "        self.resnet.layer2[1].bn2 = nn.Sequential(self.resnet.layer2[1].bn2, CBAM(128))\n",
    "        \n",
    "        self.resnet.layer3[0].bn2 = nn.Sequential(self.resnet.layer3[0].bn2, CBAM(256))\n",
    "        self.resnet.layer3[1].bn2 = nn.Sequential(self.resnet.layer3[1].bn2, CBAM(256))\n",
    "        \n",
    "        self.resnet.layer4[0].bn2 = nn.Sequential(self.resnet.layer4[0].bn2, CBAM(512))\n",
    "        self.resnet.layer4[1].bn2 = nn.Sequential(self.resnet.layer4[1].bn2, CBAM(512))\n",
    "        \n",
    "        # 替换输出层以适配CIFAR-10的10个类别\n",
    "        num_ftrs = self.resnet.fc.in_features\n",
    "        self.resnet.fc = nn.Linear(num_ftrs, num_classes)\n",
    "    \n",
    "    def forward(self, x):\n",
    "        return self.resnet(x)  # 复用ResNet18的前向传播逻辑"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5. 半监督损失函数与 Grad-CAM 可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecutionIndicator": {
     "show": true
    },
    "execution": {
     "iopub.execute_input": "2025-08-23T10:23:16.306378Z",
     "iopub.status.busy": "2025-08-23T10:23:16.306174Z",
     "iopub.status.idle": "2025-08-23T10:23:16.314269Z",
     "shell.execute_reply": "2025-08-23T10:23:16.313846Z",
     "shell.execute_reply.started": "2025-08-23T10:23:16.306365Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# 半监督学习损失函数（融合有标签损失和无标签一致性损失）\n",
    "class SemiLoss(nn.Module):\n",
    "    def __init__(self, threshold=0.95):\n",
    "        super(SemiLoss, self).__init__()\n",
    "        self.threshold = threshold  # 无标签数据置信度阈值\n",
    "        self.ce_loss = nn.CrossEntropyLoss()  # 有标签数据交叉熵损失\n",
    "    \n",
    "    def forward(self, outputs_x, targets_x, outputs_u, outputs_u_strong):\n",
    "        # 1. 有标签数据损失（标准交叉熵）\n",
    "        loss_x = self.ce_loss(outputs_x, targets_x)\n",
    "        \n",
    "        # 2. 无标签数据损失（一致性正则化）\n",
    "        p = torch.softmax(outputs_u, dim=1)  # 弱增强样本的预测概率\n",
    "        max_p, _ = torch.max(p, dim=1)  # 取最大概率（置信度）\n",
    "        mask = max_p.ge(self.threshold).float()  # 置信度高于阈值的样本才参与损失计算\n",
    "        \n",
    "        # 强增强样本与弱增强样本的预测一致性（KL散度变体）\n",
    "        loss_u = torch.mean(\n",
    "            mask * torch.sum(-p * torch.log_softmax(outputs_u_strong, dim=1), dim=1)\n",
    "        )\n",
    "        \n",
    "        # 总损失：有标签损失 + 0.5*无标签损失（平衡两者权重）\n",
    "        return loss_x + 0.5 * loss_u\n",
    "\n",
    "\n",
    "# Grad-CAM可视化工具（显示模型关注的图像区域）\n",
    "class GradCAM:\n",
    "    def __init__(self, model, target_layer):\n",
    "        self.model = model\n",
    "        self.target_layer = target_layer  # 要可视化的特征层名称\n",
    "        self.feature_maps = None  # 存储目标层的特征图\n",
    "        self.gradient = None  # 存储目标层的梯度\n",
    "        \n",
    "        # 注册钩子（捕获特征图和梯度）\n",
    "        self.hook_handles = []\n",
    "        \n",
    "        # 前向钩子：保存特征图\n",
    "        def forward_hook(module, input, output):\n",
    "            self.feature_maps = output.detach()\n",
    "        \n",
    "        # 反向钩子：保存梯度\n",
    "        def backward_hook(module, grad_in, grad_out):\n",
    "            self.gradient = grad_out[0].detach()\n",
    "        \n",
    "        # 找到目标层并注册钩子\n",
    "        for name, module in self.model.named_modules():\n",
    "            if name == self.target_layer:\n",
    "                self.hook_handles.append(module.register_forward_hook(forward_hook))\n",
    "                # 关键修改：用register_full_backward_hook替代register_backward_hook\n",
    "                self.hook_handles.append(module.register_full_backward_hook(backward_hook))\n",
    "                break\n",
    "    \n",
    "    def remove_hooks(self):\n",
    "        # 移除钩子，避免内存泄漏\n",
    "        for handle in self.hook_handles:\n",
    "            handle.remove()\n",
    "    \n",
    "    def __call__(self, x, class_idx=None):\n",
    "        # 输入单张图像张量，生成Grad-CAM热力图\n",
    "        x = x.unsqueeze(0)  # 增加批次维度\n",
    "        x.requires_grad_()  # 开启梯度跟踪\n",
    "        output = self.model(x)  # 前向传播\n",
    "        \n",
    "        # 若未指定类别，默认用预测概率最高的类别\n",
    "        if class_idx is None:\n",
    "            class_idx = torch.argmax(output, dim=1)\n",
    "        \n",
    "        # 反向传播（仅计算目标类别的梯度）\n",
    "        self.model.zero_grad()\n",
    "        one_hot = torch.zeros_like(output)\n",
    "        one_hot[0, class_idx] = 1  # 生成one-hot标签\n",
    "        output.backward(gradient=one_hot, retain_graph=True)  # 反向传播计算梯度\n",
    "        \n",
    "        # 计算特征图权重（梯度全局平均池化）\n",
    "        weights = torch.mean(self.gradient, dim=(2, 3), keepdim=True)\n",
    "        \n",
    "        # 加权组合特征图，得到原始CAM\n",
    "        cam = torch.sum(weights * self.feature_maps, dim=1).squeeze()\n",
    "        \n",
    "        # ReLU激活（只保留正向贡献）\n",
    "        cam = torch.relu(cam)\n",
    "        \n",
    "        # 归一化到0-1范围\n",
    "        if torch.max(cam) > 0:\n",
    "            cam = cam / torch.max(cam)\n",
    "        \n",
    "        # 调整尺寸与输入图像一致（32x32）\n",
    "        cam = F.resize(cam.unsqueeze(0), (x.shape[2], x.shape[3])).squeeze()\n",
    "        \n",
    "        return cam.cpu().detach().numpy()  # 返回numpy数组（便于可视化）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 6. 训练函数（含训练曲线可视化）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecutionIndicator": {
     "show": true
    },
    "execution": {
     "iopub.execute_input": "2025-08-23T10:23:16.315583Z",
     "iopub.status.busy": "2025-08-23T10:23:16.315396Z",
     "iopub.status.idle": "2025-08-23T10:23:16.328725Z",
     "shell.execute_reply": "2025-08-23T10:23:16.328363Z",
     "shell.execute_reply.started": "2025-08-23T10:23:16.315571Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "def train_model(model, train_loader, val_loader, unlabeled_loader, num_epochs, learning_rate, batch_size, log_dir='runs/cifar10'):\n",
    "    # 定义损失函数和优化器\n",
    "    criterion = nn.CrossEntropyLoss()  # 验证阶段用标准交叉熵\n",
    "    semi_criterion = SemiLoss()  # 训练阶段用半监督损失\n",
    "    optimizer = optim.Adam(model.parameters(), lr=learning_rate, weight_decay=1e-4)  # Adam优化器\n",
    "    scheduler = optim.lr_scheduler.ReduceLROnPlateau(optimizer, 'min', patience=3, factor=0.5)  # 学习率衰减（验证损失不下降时）\n",
    "    \n",
    "    # TensorBoard日志（可视化训练过程）\n",
    "    writer = SummaryWriter(log_dir)\n",
    "    \n",
    "    best_val_acc = 0.0  # 记录最佳验证准确率\n",
    "    best_model_weights = None  # 记录最佳模型权重\n",
    "    \n",
    "    # 初始化指标记录列表（用于绘制训练曲线）\n",
    "    train_losses = []\n",
    "    train_accs = []\n",
    "    val_losses = []\n",
    "    val_accs = []\n",
    "    \n",
    "    for epoch in range(num_epochs):\n",
    "        print(f'\\nEpoch {epoch + 1}/{num_epochs}')\n",
    "        print('-' * 30)\n",
    "        \n",
    "        # 训练阶段（启用梯度计算）\n",
    "        model.train()\n",
    "        running_loss = 0.0  # 累计训练损失\n",
    "        running_corrects = 0  # 累计训练正确数\n",
    "        \n",
    "        # 初始化半监督数据增强器\n",
    "        augmenter = SemiSupervisedAugmenter()\n",
    "        \n",
    "        # 合并有标签和无标签数据加载器的迭代器\n",
    "        train_iter = iter(train_loader)\n",
    "        unlabeled_iter = iter(unlabeled_loader)\n",
    "        iterations = min(len(train_loader), len(unlabeled_loader))  # 迭代次数取较小值\n",
    "        \n",
    "        # 遍历批次\n",
    "        for _ in tqdm(range(iterations), desc=\"训练批次\"):\n",
    "            try:\n",
    "                inputs, labels = next(train_iter)  # 有标签数据\n",
    "                unlabeled_inputs, _ = next(unlabeled_iter)  # 无标签数据\n",
    "            except StopIteration:\n",
    "                break  # 数据迭代完毕\n",
    "            \n",
    "            # 转移到设备（GPU/CPU）\n",
    "            inputs = inputs.to(device)\n",
    "            labels = labels.to(device)\n",
    "            unlabeled_inputs = unlabeled_inputs.to(device)\n",
    "            \n",
    "            # 对无标签数据做弱增强和强增强\n",
    "            weak_unlabeled, strong_unlabeled = [], []\n",
    "            for img in unlabeled_inputs:\n",
    "                # 转换为PIL图像（增强需要PIL格式）\n",
    "                img_np = img.permute(1, 2, 0).cpu().numpy()  # (C,H,W)→(H,W,C)\n",
    "                img_np = (img_np * np.array([0.2470, 0.2435, 0.2616]) + np.array([0.4914, 0.4822, 0.4465])) * 255  # 反归一化\n",
    "                img_pil = Image.fromarray(img_np.astype(np.uint8))\n",
    "                \n",
    "                # 增强并收集结果\n",
    "                weak, strong = augmenter(img_pil)\n",
    "                weak_unlabeled.append(weak)\n",
    "                strong_unlabeled.append(strong)\n",
    "            \n",
    "            # 转换为张量并转移到设备\n",
    "            weak_unlabeled = torch.stack(weak_unlabeled).to(device)\n",
    "            strong_unlabeled = torch.stack(strong_unlabeled).to(device)\n",
    "            \n",
    "            # 清零梯度\n",
    "            optimizer.zero_grad()\n",
    "            \n",
    "            # 前向传播+反向传播+优化\n",
    "            with torch.set_grad_enabled(True):\n",
    "                # 有标签数据预测\n",
    "                outputs_x = model(inputs)\n",
    "                _, preds = torch.max(outputs_x, 1)  # 预测类别\n",
    "                \n",
    "                # 无标签数据预测（弱增强和强增强）\n",
    "                outputs_u = model(weak_unlabeled)\n",
    "                outputs_u_strong = model(strong_unlabeled)\n",
    "                \n",
    "                # 计算半监督损失\n",
    "                loss = semi_criterion(outputs_x, labels, outputs_u, outputs_u_strong)\n",
    "                \n",
    "                # 反向传播和参数更新\n",
    "                loss.backward()\n",
    "                optimizer.step()\n",
    "            \n",
    "            # 累计损失和正确数\n",
    "            running_loss += loss.item() * inputs.size(0)\n",
    "            running_corrects += torch.sum(preds == labels.data)\n",
    "        \n",
    "        # 计算训练集平均损失和准确率\n",
    "        epoch_loss = running_loss / len(train_loader.dataset)\n",
    "        epoch_acc = running_corrects.double() / len(train_loader.dataset)\n",
    "        print(f'训练集 - 损失: {epoch_loss:.4f} | 准确率: {epoch_acc:.4f}')\n",
    "        \n",
    "        # 记录训练指标\n",
    "        train_losses.append(epoch_loss)\n",
    "        train_accs.append(epoch_acc.item())  # 转换为numpy数值\n",
    "        \n",
    "        # 写入TensorBoard\n",
    "        writer.add_scalar('Train/Loss', epoch_loss, epoch)\n",
    "        writer.add_scalar('Train/Accuracy', epoch_acc, epoch)\n",
    "        \n",
    "        # 验证阶段（关闭梯度计算）\n",
    "        model.eval()\n",
    "        val_running_loss = 0.0  # 累计验证损失\n",
    "        val_running_corrects = 0  # 累计验证正确数\n",
    "        \n",
    "        with torch.no_grad():\n",
    "            for inputs, labels in val_loader:\n",
    "                inputs = inputs.to(device)\n",
    "                labels = labels.to(device)\n",
    "                \n",
    "                # 预测\n",
    "                outputs = model(inputs)\n",
    "                _, preds = torch.max(outputs, 1)\n",
    "                loss = criterion(outputs, labels)  # 验证用标准交叉熵\n",
    "                \n",
    "                # 累计损失和正确数\n",
    "                val_running_loss += loss.item() * inputs.size(0)\n",
    "                val_running_corrects += torch.sum(preds == labels.data)\n",
    "        \n",
    "        # 计算验证集平均损失和准确率\n",
    "        val_epoch_loss = val_running_loss / len(val_loader.dataset)\n",
    "        val_epoch_acc = val_running_corrects.double() / len(val_loader.dataset)\n",
    "        print(f'验证集 - 损失: {val_epoch_loss:.4f} | 准确率: {val_epoch_acc:.4f}')\n",
    "        \n",
    "        # 记录验证指标\n",
    "        val_losses.append(val_epoch_loss)\n",
    "        val_accs.append(val_epoch_acc.item())  # 转换为numpy数值\n",
    "        \n",
    "        # 写入TensorBoard\n",
    "        writer.add_scalar('Val/Loss', val_epoch_loss, epoch)\n",
    "        writer.add_scalar('Val/Accuracy', val_epoch_acc, epoch)\n",
    "        \n",
    "        # 调整学习率（基于验证损失）\n",
    "        scheduler.step(val_epoch_loss)\n",
    "        \n",
    "        # 保存最佳模型（验证准确率更高时）\n",
    "        if val_epoch_acc > best_val_acc:\n",
    "            best_val_acc = val_epoch_acc\n",
    "            best_model_weights = model.state_dict()\n",
    "            torch.save(best_model_weights, 'best_cifar10_model.pth')\n",
    "            print(f'→ 保存最佳模型（验证准确率: {best_val_acc:.4f}）')\n",
    "    \n",
    "    # 训练结束后加载最佳模型\n",
    "    print(f'\\n训练完成！最佳验证准确率: {best_val_acc:.4f}')\n",
    "    model.load_state_dict(best_model_weights)\n",
    "    \n",
    "    # 关闭TensorBoard\n",
    "    writer.close()\n",
    "    \n",
    "    # 生成epoch序列\n",
    "    epochs = range(1, num_epochs + 1)\n",
    "    \n",
    "    # 创建画布\n",
    "    plt.figure(figsize=(12, 5))\n",
    "    \n",
    "    # 子图1：损失曲线\n",
    "    plt.subplot(1, 2, 1)\n",
    "    plt.plot(epochs, train_losses, label='Training Loss', color='blue', marker='o')\n",
    "    plt.plot(epochs, val_losses, label='Validation Loss', color='red', marker='s')\n",
    "    plt.title('Epoch vs. Loss')\n",
    "    plt.xlabel('Epoch')\n",
    "    plt.ylabel('Loss Value')\n",
    "    plt.legend()\n",
    "    plt.grid(alpha=0.3)\n",
    "    \n",
    "    # 子图2：准确率曲线\n",
    "    plt.subplot(1, 2, 2)\n",
    "    plt.plot(epochs, train_accs, label='Training Accuracy', color='green', marker='^')\n",
    "    plt.plot(epochs, val_accs, label='Validation Accuracy', color='purple', marker='D')\n",
    "    plt.title('Epoch vs. Accuracy')\n",
    "    plt.xlabel('Epoch')\n",
    "    plt.ylabel('Accuracy')\n",
    "    plt.legend()\n",
    "    plt.grid(alpha=0.3)\n",
    "    \n",
    "    # 调整布局并显示\n",
    "    plt.tight_layout()\n",
    "    plt.show()\n",
    "    \n",
    "    return model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 7. 测试函数与 Grad-CAM 可视化函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecutionIndicator": {
     "show": true
    },
    "execution": {
     "iopub.execute_input": "2025-08-23T10:23:16.329377Z",
     "iopub.status.busy": "2025-08-23T10:23:16.329129Z",
     "iopub.status.idle": "2025-08-23T10:23:16.337449Z",
     "shell.execute_reply": "2025-08-23T10:23:16.336983Z",
     "shell.execute_reply.started": "2025-08-23T10:23:16.329364Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# 测试模型（计算总体准确率和每类准确率）\n",
    "def test_model(model, test_loader):\n",
    "    model.eval()  # 切换到评估模式\n",
    "    running_corrects = 0  # 总体正确数\n",
    "    class_correct = [0. for _ in range(10)]  # 每类正确数\n",
    "    class_total = [0. for _ in range(10)]  # 每类总样本数\n",
    "    \n",
    "    with torch.no_grad():  # 关闭梯度计算\n",
    "        for inputs, labels in test_loader:\n",
    "            inputs = inputs.to(device)\n",
    "            labels = labels.to(device)\n",
    "            \n",
    "            # 预测\n",
    "            outputs = model(inputs)\n",
    "            _, preds = torch.max(outputs, 1)\n",
    "            \n",
    "            # 累计总体正确数\n",
    "            running_corrects += torch.sum(preds == labels.data)\n",
    "            \n",
    "            # 按类别统计\n",
    "            c = (preds == labels).squeeze()  # 每个样本的预测是否正确\n",
    "            for i in range(inputs.size(0)):\n",
    "                label = labels[i]  # 真实标签\n",
    "                class_correct[label] += c[i].item()  # 累加正确数\n",
    "                class_total[label] += 1  # 累加总样本数\n",
    "    \n",
    "    # 打印每类准确率\n",
    "    class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']\n",
    "    print(\"\\n各类别准确率：\")\n",
    "    for i in range(10):\n",
    "        print(f'→ {class_names[i]}: {100 * class_correct[i] / class_total[i]:.2f}%')\n",
    "    \n",
    "    # 计算总体测试准确率\n",
    "    test_acc = running_corrects.double() / len(test_loader.dataset)\n",
    "    print(f'\\n总体测试准确率: {test_acc:.4f}')\n",
    "    \n",
    "    return test_acc\n",
    "    \n",
    "\n",
    "# 可视化Grad-CAM结果（显示模型关注区域）\n",
    "def visualize_grad_cam(model, test_loader, num_samples=5, target_layer='resnet.layer4.1.conv2'):\n",
    "    model.eval()\n",
    "    grad_cam = GradCAM(model, target_layer)  # 初始化Grad-CAM\n",
    "    \n",
    "    # 获取测试集样本\n",
    "    images, labels = next(iter(test_loader))\n",
    "    images = images[:num_samples]  # 取前num_samples个样本\n",
    "    labels = labels[:num_samples]\n",
    "    \n",
    "    class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']\n",
    "    \n",
    "    # 逐个可视化\n",
    "    for i in range(num_samples):\n",
    "        img = images[i].to(device)\n",
    "        label = labels[i]\n",
    "        \n",
    "        # 预测类别\n",
    "        with torch.no_grad():\n",
    "            output = model(img.unsqueeze(0))\n",
    "            _, pred = torch.max(output, 1)\n",
    "        \n",
    "        # 生成Grad-CAM热力图\n",
    "        cam = grad_cam(img, pred.item())\n",
    "        \n",
    "        # 转换图像格式（反归一化，便于显示）\n",
    "        img_np = img.permute(1, 2, 0).cpu().numpy()\n",
    "        img_np = (img_np * np.array([0.2470, 0.2435, 0.2616]) + np.array([0.4914, 0.4822, 0.4465])) * 255\n",
    "        img_np = img_np.astype(np.uint8)\n",
    "        \n",
    "        # 绘制原图和热力图\n",
    "        plt.figure(figsize=(8, 4))\n",
    "        \n",
    "        plt.subplot(121)\n",
    "        plt.imshow(img_np)\n",
    "        plt.title(f'True Label: {class_names[label]}\\nPredicted Label: {class_names[pred.item()]}')\n",
    "        plt.axis('off')\n",
    "        \n",
    "        plt.subplot(122)\n",
    "        plt.imshow(img_np)\n",
    "        plt.imshow(cam, cmap='jet', alpha=0.5)  # 叠加热力图（透明度0.5）\n",
    "        plt.title('Grad-CAM Heatmap')\n",
    "        plt.axis('off')\n",
    "        \n",
    "        plt.tight_layout()\n",
    "        # plt.savefig(f'cifar10_grad_cam_{i}.png')  # 保存图像\n",
    "        plt.show()\n",
    "    \n",
    "    # 移除钩子\n",
    "    grad_cam.remove_hooks()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 8. 主函数（数据加载与流程执行）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecutionIndicator": {
     "show": true
    },
    "execution": {
     "iopub.execute_input": "2025-08-23T10:23:16.338045Z",
     "iopub.status.busy": "2025-08-23T10:23:16.337899Z",
     "iopub.status.idle": "2025-08-23T12:45:40.470943Z",
     "shell.execute_reply": "2025-08-23T12:45:40.470207Z",
     "shell.execute_reply.started": "2025-08-23T10:23:16.338032Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Files already downloaded and verified\n",
      "Files already downloaded and verified\n",
      "Files already downloaded and verified\n",
      "数据集大小：\n",
      "→ 有标签训练集: 28000\n",
      "→ 无标签训练集: 12000\n",
      "→ 验证集: 40000\n",
      "→ 测试集: 10000\n",
      "\n",
      "开始训练（300轮，学习率0.001）...\n",
      "\n",
      "Epoch 1/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:23<00:00,  3.98it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.6680 | 准确率: 0.1845\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 1.2893 | 准确率: 0.5329\n",
      "→ 保存最佳模型（验证准确率: 0.5329）\n",
      "\n",
      "Epoch 2/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:23<00:00,  4.05it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.4911 | 准确率: 0.2568\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 1.0025 | 准确率: 0.6463\n",
      "→ 保存最佳模型（验证准确率: 0.6463）\n",
      "\n",
      "Epoch 3/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.09it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.4100 | 准确率: 0.2879\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.8175 | 准确率: 0.7250\n",
      "→ 保存最佳模型（验证准确率: 0.7250）\n",
      "\n",
      "Epoch 4/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:23<00:00,  4.05it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.3749 | 准确率: 0.3026\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.7428 | 准确率: 0.7419\n",
      "→ 保存最佳模型（验证准确率: 0.7419）\n",
      "\n",
      "Epoch 5/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:23<00:00,  4.03it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.3446 | 准确率: 0.3158\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.6373 | 准确率: 0.7800\n",
      "→ 保存最佳模型（验证准确率: 0.7800）\n",
      "\n",
      "Epoch 6/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:23<00:00,  4.06it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.3227 | 准确率: 0.3222\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.5975 | 准确率: 0.7955\n",
      "→ 保存最佳模型（验证准确率: 0.7955）\n",
      "\n",
      "Epoch 7/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:23<00:00,  4.03it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.3040 | 准确率: 0.3301\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.6508 | 准确率: 0.7844\n",
      "\n",
      "Epoch 8/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:23<00:00,  4.03it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.2931 | 准确率: 0.3345\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.5760 | 准确率: 0.8093\n",
      "→ 保存最佳模型（验证准确率: 0.8093）\n",
      "\n",
      "Epoch 9/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:23<00:00,  4.07it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.2815 | 准确率: 0.3385\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.4853 | 准确率: 0.8378\n",
      "→ 保存最佳模型（验证准确率: 0.8378）\n",
      "\n",
      "Epoch 10/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.09it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.2759 | 准确率: 0.3414\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.4903 | 准确率: 0.8349\n",
      "\n",
      "Epoch 11/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.11it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.2615 | 准确率: 0.3451\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.5232 | 准确率: 0.8293\n",
      "\n",
      "Epoch 12/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.2535 | 准确率: 0.3477\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.4654 | 准确率: 0.8454\n",
      "→ 保存最佳模型（验证准确率: 0.8454）\n",
      "\n",
      "Epoch 13/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.13it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.2427 | 准确率: 0.3513\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.4656 | 准确率: 0.8448\n",
      "\n",
      "Epoch 14/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.2398 | 准确率: 0.3539\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.4540 | 准确率: 0.8482\n",
      "→ 保存最佳模型（验证准确率: 0.8482）\n",
      "\n",
      "Epoch 15/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.2370 | 准确率: 0.3546\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.4844 | 准确率: 0.8403\n",
      "\n",
      "Epoch 16/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.2234 | 准确率: 0.3586\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.4294 | 准确率: 0.8594\n",
      "→ 保存最佳模型（验证准确率: 0.8594）\n",
      "\n",
      "Epoch 17/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.13it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.2213 | 准确率: 0.3608\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.4824 | 准确率: 0.8562\n",
      "\n",
      "Epoch 18/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.14it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.2273 | 准确率: 0.3590\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.4038 | 准确率: 0.8659\n",
      "→ 保存最佳模型（验证准确率: 0.8659）\n",
      "\n",
      "Epoch 19/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.14it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.2142 | 准确率: 0.3635\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.3761 | 准确率: 0.8739\n",
      "→ 保存最佳模型（验证准确率: 0.8739）\n",
      "\n",
      "Epoch 20/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.19it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.2123 | 准确率: 0.3630\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.4025 | 准确率: 0.8709\n",
      "\n",
      "Epoch 21/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.18it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.2067 | 准确率: 0.3657\n",
      "验证集 - 损失: 0.3564 | 准确率: 0.8809\n",
      "→ 保存最佳模型（验证准确率: 0.8809）\n",
      "\n",
      "Epoch 22/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.21it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.2037 | 准确率: 0.3659\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.3984 | 准确率: 0.8735\n",
      "\n",
      "Epoch 23/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.21it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1955 | 准确率: 0.3689\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.3840 | 准确率: 0.8733\n",
      "\n",
      "Epoch 24/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.19it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1955 | 准确率: 0.3688\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.4184 | 准确率: 0.8661\n",
      "\n",
      "Epoch 25/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.20it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1925 | 准确率: 0.3700\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.3417 | 准确率: 0.8911\n",
      "→ 保存最佳模型（验证准确率: 0.8911）\n",
      "\n",
      "Epoch 26/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1875 | 准确率: 0.3739\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.3584 | 准确率: 0.8852\n",
      "\n",
      "Epoch 27/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1868 | 准确率: 0.3719\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.3617 | 准确率: 0.8864\n",
      "\n",
      "Epoch 28/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1861 | 准确率: 0.3730\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.3473 | 准确率: 0.8856\n",
      "\n",
      "Epoch 29/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1809 | 准确率: 0.3745\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.3294 | 准确率: 0.8931\n",
      "→ 保存最佳模型（验证准确率: 0.8931）\n",
      "\n",
      "Epoch 30/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1795 | 准确率: 0.3740\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.3150 | 准确率: 0.8972\n",
      "→ 保存最佳模型（验证准确率: 0.8972）\n",
      "\n",
      "Epoch 31/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1718 | 准确率: 0.3759\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.3481 | 准确率: 0.8848\n",
      "\n",
      "Epoch 32/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1720 | 准确率: 0.3774\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.3140 | 准确率: 0.8964\n",
      "\n",
      "Epoch 33/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1704 | 准确率: 0.3784\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.2976 | 准确率: 0.9053\n",
      "→ 保存最佳模型（验证准确率: 0.9053）\n",
      "\n",
      "Epoch 34/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1685 | 准确率: 0.3788\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.3518 | 准确率: 0.8903\n",
      "\n",
      "Epoch 35/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1612 | 准确率: 0.3815\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.2859 | 准确率: 0.9093\n",
      "→ 保存最佳模型（验证准确率: 0.9093）\n",
      "\n",
      "Epoch 36/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1604 | 准确率: 0.3819\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.3212 | 准确率: 0.8980\n",
      "\n",
      "Epoch 37/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1603 | 准确率: 0.3817\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.2994 | 准确率: 0.9036\n",
      "\n",
      "Epoch 38/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.22it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1623 | 准确率: 0.3816\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.3047 | 准确率: 0.9047\n",
      "\n",
      "Epoch 39/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.27it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1554 | 准确率: 0.3820\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.3136 | 准确率: 0.9012\n",
      "\n",
      "Epoch 40/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:21<00:00,  4.28it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1314 | 准确率: 0.3922\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.2339 | 准确率: 0.9274\n",
      "→ 保存最佳模型（验证准确率: 0.9274）\n",
      "\n",
      "Epoch 41/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1196 | 准确率: 0.3951\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.2323 | 准确率: 0.9284\n",
      "→ 保存最佳模型（验证准确率: 0.9284）\n",
      "\n",
      "Epoch 42/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.27it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1125 | 准确率: 0.3974\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.2285 | 准确率: 0.9306\n",
      "→ 保存最佳模型（验证准确率: 0.9306）\n",
      "\n",
      "Epoch 43/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.27it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1098 | 准确率: 0.3978\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.2169 | 准确率: 0.9335\n",
      "→ 保存最佳模型（验证准确率: 0.9335）\n",
      "\n",
      "Epoch 44/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1121 | 准确率: 0.3974\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.2210 | 准确率: 0.9312\n",
      "\n",
      "Epoch 45/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1127 | 准确率: 0.3980\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.2244 | 准确率: 0.9291\n",
      "\n",
      "Epoch 46/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.21it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1046 | 准确率: 0.4006\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.2278 | 准确率: 0.9326\n",
      "\n",
      "Epoch 47/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.1065 | 准确率: 0.3993\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.2208 | 准确率: 0.9347\n",
      "→ 保存最佳模型（验证准确率: 0.9347）\n",
      "\n",
      "Epoch 48/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0946 | 准确率: 0.4039\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1830 | 准确率: 0.9461\n",
      "→ 保存最佳模型（验证准确率: 0.9461）\n",
      "\n",
      "Epoch 49/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0846 | 准确率: 0.4058\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1870 | 准确率: 0.9451\n",
      "\n",
      "Epoch 50/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.22it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0819 | 准确率: 0.4079\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1774 | 准确率: 0.9470\n",
      "→ 保存最佳模型（验证准确率: 0.9470）\n",
      "\n",
      "Epoch 51/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0786 | 准确率: 0.4089\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1746 | 准确率: 0.9498\n",
      "→ 保存最佳模型（验证准确率: 0.9498）\n",
      "\n",
      "Epoch 52/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0793 | 准确率: 0.4091\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1698 | 准确率: 0.9501\n",
      "→ 保存最佳模型（验证准确率: 0.9501）\n",
      "\n",
      "Epoch 53/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0805 | 准确率: 0.4084\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1693 | 准确率: 0.9513\n",
      "→ 保存最佳模型（验证准确率: 0.9513）\n",
      "\n",
      "Epoch 54/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0781 | 准确率: 0.4096\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1769 | 准确率: 0.9494\n",
      "\n",
      "Epoch 55/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.22it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0774 | 准确率: 0.4095\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1764 | 准确率: 0.9503\n",
      "\n",
      "Epoch 56/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0718 | 准确率: 0.4112\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1789 | 准确率: 0.9499\n",
      "\n",
      "Epoch 57/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0718 | 准确率: 0.4112\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1700 | 准确率: 0.9525\n",
      "→ 保存最佳模型（验证准确率: 0.9525）\n",
      "\n",
      "Epoch 58/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0674 | 准确率: 0.4138\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1603 | 准确率: 0.9554\n",
      "→ 保存最佳模型（验证准确率: 0.9554）\n",
      "\n",
      "Epoch 59/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:21<00:00,  4.27it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0633 | 准确率: 0.4151\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1625 | 准确率: 0.9564\n",
      "→ 保存最佳模型（验证准确率: 0.9564）\n",
      "\n",
      "Epoch 60/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.27it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0640 | 准确率: 0.4135\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1629 | 准确率: 0.9571\n",
      "→ 保存最佳模型（验证准确率: 0.9571）\n",
      "\n",
      "Epoch 61/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:21<00:00,  4.28it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0661 | 准确率: 0.4132\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1594 | 准确率: 0.9570\n",
      "\n",
      "Epoch 62/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0569 | 准确率: 0.4161\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1573 | 准确率: 0.9577\n",
      "→ 保存最佳模型（验证准确率: 0.9577）\n",
      "\n",
      "Epoch 63/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0591 | 准确率: 0.4157\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1588 | 准确率: 0.9578\n",
      "→ 保存最佳模型（验证准确率: 0.9578）\n",
      "\n",
      "Epoch 64/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0574 | 准确率: 0.4165\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1599 | 准确率: 0.9585\n",
      "→ 保存最佳模型（验证准确率: 0.9585）\n",
      "\n",
      "Epoch 65/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0562 | 准确率: 0.4164\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1553 | 准确率: 0.9599\n",
      "→ 保存最佳模型（验证准确率: 0.9599）\n",
      "\n",
      "Epoch 66/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0611 | 准确率: 0.4161\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1551 | 准确率: 0.9593\n",
      "\n",
      "Epoch 67/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0519 | 准确率: 0.4179\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1542 | 准确率: 0.9611\n",
      "→ 保存最佳模型（验证准确率: 0.9611）\n",
      "\n",
      "Epoch 68/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0545 | 准确率: 0.4176\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1537 | 准确率: 0.9609\n",
      "\n",
      "Epoch 69/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0550 | 准确率: 0.4173\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1540 | 准确率: 0.9614\n",
      "→ 保存最佳模型（验证准确率: 0.9614）\n",
      "\n",
      "Epoch 70/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0527 | 准确率: 0.4184\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1581 | 准确率: 0.9614\n",
      "\n",
      "Epoch 71/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0571 | 准确率: 0.4168\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1599 | 准确率: 0.9613\n",
      "\n",
      "Epoch 72/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.22it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0524 | 准确率: 0.4188\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1596 | 准确率: 0.9605\n",
      "\n",
      "Epoch 73/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.22it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0536 | 准确率: 0.4176\n",
      "验证集 - 损失: 0.1489 | 准确率: 0.9633\n",
      "→ 保存最佳模型（验证准确率: 0.9633）\n",
      "\n",
      "Epoch 74/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0472 | 准确率: 0.4205\n",
      "验证集 - 损失: 0.1478 | 准确率: 0.9637\n",
      "→ 保存最佳模型（验证准确率: 0.9637）\n",
      "\n",
      "Epoch 75/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0491 | 准确率: 0.4198\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1492 | 准确率: 0.9633\n",
      "\n",
      "Epoch 76/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0470 | 准确率: 0.4202\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1500 | 准确率: 0.9638\n",
      "→ 保存最佳模型（验证准确率: 0.9638）\n",
      "\n",
      "Epoch 77/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.27it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0470 | 准确率: 0.4203\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1512 | 准确率: 0.9633\n",
      "\n",
      "Epoch 78/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0455 | 准确率: 0.4212\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1505 | 准确率: 0.9645\n",
      "→ 保存最佳模型（验证准确率: 0.9645）\n",
      "\n",
      "Epoch 79/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0463 | 准确率: 0.4197\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1485 | 准确率: 0.9652\n",
      "→ 保存最佳模型（验证准确率: 0.9652）\n",
      "\n",
      "Epoch 80/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0440 | 准确率: 0.4206\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1474 | 准确率: 0.9656\n",
      "→ 保存最佳模型（验证准确率: 0.9656）\n",
      "\n",
      "Epoch 81/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0440 | 准确率: 0.4209\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1467 | 准确率: 0.9655\n",
      "\n",
      "Epoch 82/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0443 | 准确率: 0.4213\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1485 | 准确率: 0.9651\n",
      "\n",
      "Epoch 83/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0439 | 准确率: 0.4211\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1474 | 准确率: 0.9658\n",
      "→ 保存最佳模型（验证准确率: 0.9658）\n",
      "\n",
      "Epoch 84/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.22it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0435 | 准确率: 0.4208\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1552 | 准确率: 0.9643\n",
      "\n",
      "Epoch 85/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0439 | 准确率: 0.4208\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1480 | 准确率: 0.9664\n",
      "→ 保存最佳模型（验证准确率: 0.9664）\n",
      "\n",
      "Epoch 86/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0402 | 准确率: 0.4218\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1484 | 准确率: 0.9654\n",
      "\n",
      "Epoch 87/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0422 | 准确率: 0.4213\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1467 | 准确率: 0.9661\n",
      "\n",
      "Epoch 88/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0412 | 准确率: 0.4223\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1460 | 准确率: 0.9664\n",
      "→ 保存最佳模型（验证准确率: 0.9664）\n",
      "\n",
      "Epoch 89/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0422 | 准确率: 0.4219\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1484 | 准确率: 0.9660\n",
      "\n",
      "Epoch 90/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0416 | 准确率: 0.4210\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1488 | 准确率: 0.9660\n",
      "\n",
      "Epoch 91/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0401 | 准确率: 0.4221\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1446 | 准确率: 0.9665\n",
      "→ 保存最佳模型（验证准确率: 0.9665）\n",
      "\n",
      "Epoch 92/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0438 | 准确率: 0.4214\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1479 | 准确率: 0.9662\n",
      "\n",
      "Epoch 93/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.21it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0396 | 准确率: 0.4228\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1462 | 准确率: 0.9668\n",
      "→ 保存最佳模型（验证准确率: 0.9668）\n",
      "\n",
      "Epoch 94/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0407 | 准确率: 0.4220\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1448 | 准确率: 0.9673\n",
      "→ 保存最佳模型（验证准确率: 0.9673）\n",
      "\n",
      "Epoch 95/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0391 | 准确率: 0.4225\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1490 | 准确率: 0.9668\n",
      "\n",
      "Epoch 96/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0424 | 准确率: 0.4213\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1455 | 准确率: 0.9669\n",
      "\n",
      "Epoch 97/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0404 | 准确率: 0.4214\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1453 | 准确率: 0.9670\n",
      "\n",
      "Epoch 98/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0412 | 准确率: 0.4215\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1446 | 准确率: 0.9673\n",
      "\n",
      "Epoch 99/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0406 | 准确率: 0.4219\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1468 | 准确率: 0.9669\n",
      "\n",
      "Epoch 100/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.27it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0424 | 准确率: 0.4213\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1488 | 准确率: 0.9665\n",
      "\n",
      "Epoch 101/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0375 | 准确率: 0.4226\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1451 | 准确率: 0.9671\n",
      "\n",
      "Epoch 102/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.20it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0410 | 准确率: 0.4215\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1485 | 准确率: 0.9668\n",
      "\n",
      "Epoch 103/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.21it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0406 | 准确率: 0.4224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1472 | 准确率: 0.9666\n",
      "\n",
      "Epoch 104/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0410 | 准确率: 0.4224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1462 | 准确率: 0.9670\n",
      "\n",
      "Epoch 105/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0409 | 准确率: 0.4217\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1477 | 准确率: 0.9666\n",
      "\n",
      "Epoch 106/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0389 | 准确率: 0.4227\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1467 | 准确率: 0.9668\n",
      "\n",
      "Epoch 107/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0375 | 准确率: 0.4231\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1464 | 准确率: 0.9668\n",
      "\n",
      "Epoch 108/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0433 | 准确率: 0.4215\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1490 | 准确率: 0.9666\n",
      "\n",
      "Epoch 109/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0382 | 准确率: 0.4229\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1457 | 准确率: 0.9675\n",
      "→ 保存最佳模型（验证准确率: 0.9675）\n",
      "\n",
      "Epoch 110/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.27it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0396 | 准确率: 0.4229\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1458 | 准确率: 0.9667\n",
      "\n",
      "Epoch 111/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0399 | 准确率: 0.4221\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1485 | 准确率: 0.9670\n",
      "\n",
      "Epoch 112/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:21<00:00,  4.27it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0377 | 准确率: 0.4233\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1466 | 准确率: 0.9671\n",
      "\n",
      "Epoch 113/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:21<00:00,  4.27it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0388 | 准确率: 0.4225\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1474 | 准确率: 0.9669\n",
      "\n",
      "Epoch 114/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.27it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0389 | 准确率: 0.4224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1463 | 准确率: 0.9669\n",
      "\n",
      "Epoch 115/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:21<00:00,  4.28it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0394 | 准确率: 0.4223\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1473 | 准确率: 0.9669\n",
      "\n",
      "Epoch 116/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0378 | 准确率: 0.4226\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1461 | 准确率: 0.9676\n",
      "→ 保存最佳模型（验证准确率: 0.9676）\n",
      "\n",
      "Epoch 117/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.22it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0386 | 准确率: 0.4225\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1474 | 准确率: 0.9665\n",
      "\n",
      "Epoch 118/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0408 | 准确率: 0.4224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1463 | 准确率: 0.9669\n",
      "\n",
      "Epoch 119/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0387 | 准确率: 0.4222\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1448 | 准确率: 0.9675\n",
      "\n",
      "Epoch 120/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0382 | 准确率: 0.4226\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1458 | 准确率: 0.9673\n",
      "\n",
      "Epoch 121/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0368 | 准确率: 0.4233\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1482 | 准确率: 0.9668\n",
      "\n",
      "Epoch 122/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.22it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0395 | 准确率: 0.4221\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1451 | 准确率: 0.9673\n",
      "\n",
      "Epoch 123/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0430 | 准确率: 0.4216\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1454 | 准确率: 0.9675\n",
      "\n",
      "Epoch 124/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0395 | 准确率: 0.4223\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1450 | 准确率: 0.9666\n",
      "\n",
      "Epoch 125/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0418 | 准确率: 0.4220\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1458 | 准确率: 0.9671\n",
      "\n",
      "Epoch 126/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:21<00:00,  4.28it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0379 | 准确率: 0.4227\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1465 | 准确率: 0.9669\n",
      "\n",
      "Epoch 127/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0364 | 准确率: 0.4229\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1456 | 准确率: 0.9672\n",
      "\n",
      "Epoch 128/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0371 | 准确率: 0.4234\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1463 | 准确率: 0.9669\n",
      "\n",
      "Epoch 129/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0414 | 准确率: 0.4216\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1457 | 准确率: 0.9673\n",
      "\n",
      "Epoch 130/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:21<00:00,  4.28it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0414 | 准确率: 0.4217\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1471 | 准确率: 0.9669\n",
      "\n",
      "Epoch 131/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:21<00:00,  4.27it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0378 | 准确率: 0.4233\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1454 | 准确率: 0.9667\n",
      "\n",
      "Epoch 132/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0382 | 准确率: 0.4230\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1483 | 准确率: 0.9669\n",
      "\n",
      "Epoch 133/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0408 | 准确率: 0.4219\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1473 | 准确率: 0.9665\n",
      "\n",
      "Epoch 134/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0393 | 准确率: 0.4225\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1469 | 准确率: 0.9667\n",
      "\n",
      "Epoch 135/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0403 | 准确率: 0.4222\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1448 | 准确率: 0.9671\n",
      "\n",
      "Epoch 136/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.22it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0393 | 准确率: 0.4226\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1454 | 准确率: 0.9673\n",
      "\n",
      "Epoch 137/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0368 | 准确率: 0.4226\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1465 | 准确率: 0.9668\n",
      "\n",
      "Epoch 138/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0385 | 准确率: 0.4229\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1476 | 准确率: 0.9667\n",
      "\n",
      "Epoch 139/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0393 | 准确率: 0.4229\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1456 | 准确率: 0.9671\n",
      "\n",
      "Epoch 140/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.22it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0395 | 准确率: 0.4224\n",
      "验证集 - 损失: 0.1480 | 准确率: 0.9667\n",
      "\n",
      "Epoch 141/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.19it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0404 | 准确率: 0.4217\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1467 | 准确率: 0.9671\n",
      "\n",
      "Epoch 142/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.22it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0407 | 准确率: 0.4229\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1466 | 准确率: 0.9664\n",
      "\n",
      "Epoch 143/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0411 | 准确率: 0.4217\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1470 | 准确率: 0.9671\n",
      "\n",
      "Epoch 144/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0408 | 准确率: 0.4225\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1467 | 准确率: 0.9666\n",
      "\n",
      "Epoch 145/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0409 | 准确率: 0.4214\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1486 | 准确率: 0.9671\n",
      "\n",
      "Epoch 146/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0389 | 准确率: 0.4228\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1484 | 准确率: 0.9664\n",
      "\n",
      "Epoch 147/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0378 | 准确率: 0.4226\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1468 | 准确率: 0.9672\n",
      "\n",
      "Epoch 148/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:21<00:00,  4.27it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0371 | 准确率: 0.4226\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1464 | 准确率: 0.9669\n",
      "\n",
      "Epoch 149/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0364 | 准确率: 0.4236\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1470 | 准确率: 0.9666\n",
      "\n",
      "Epoch 150/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0400 | 准确率: 0.4220\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1452 | 准确率: 0.9672\n",
      "\n",
      "Epoch 151/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0411 | 准确率: 0.4230\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1475 | 准确率: 0.9666\n",
      "\n",
      "Epoch 152/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0393 | 准确率: 0.4223\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1460 | 准确率: 0.9676\n",
      "\n",
      "Epoch 153/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0418 | 准确率: 0.4226\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1453 | 准确率: 0.9668\n",
      "\n",
      "Epoch 154/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0396 | 准确率: 0.4225\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1454 | 准确率: 0.9672\n",
      "\n",
      "Epoch 155/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.21it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0417 | 准确率: 0.4220\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1471 | 准确率: 0.9669\n",
      "\n",
      "Epoch 156/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.27it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0386 | 准确率: 0.4229\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1469 | 准确率: 0.9667\n",
      "\n",
      "Epoch 157/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0412 | 准确率: 0.4225\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1467 | 准确率: 0.9669\n",
      "\n",
      "Epoch 158/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0386 | 准确率: 0.4228\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1464 | 准确率: 0.9671\n",
      "\n",
      "Epoch 159/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0377 | 准确率: 0.4225\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1462 | 准确率: 0.9674\n",
      "\n",
      "Epoch 160/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:21<00:00,  4.28it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0403 | 准确率: 0.4223\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1477 | 准确率: 0.9673\n",
      "\n",
      "Epoch 161/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:21<00:00,  4.30it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0394 | 准确率: 0.4225\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1458 | 准确率: 0.9674\n",
      "\n",
      "Epoch 162/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.27it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0387 | 准确率: 0.4226\n",
      "验证集 - 损失: 0.1454 | 准确率: 0.9667\n",
      "\n",
      "Epoch 163/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0399 | 准确率: 0.4217\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1471 | 准确率: 0.9673\n",
      "\n",
      "Epoch 164/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0416 | 准确率: 0.4222\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1467 | 准确率: 0.9667\n",
      "\n",
      "Epoch 165/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:21<00:00,  4.27it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0407 | 准确率: 0.4213\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1457 | 准确率: 0.9672\n",
      "\n",
      "Epoch 166/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0404 | 准确率: 0.4225\n",
      "验证集 - 损失: 0.1464 | 准确率: 0.9675\n",
      "\n",
      "Epoch 167/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.27it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0410 | 准确率: 0.4218\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1464 | 准确率: 0.9675\n",
      "\n",
      "Epoch 168/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0398 | 准确率: 0.4223\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1466 | 准确率: 0.9671\n",
      "\n",
      "Epoch 169/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.22it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0405 | 准确率: 0.4218\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1472 | 准确率: 0.9667\n",
      "\n",
      "Epoch 170/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0386 | 准确率: 0.4228\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1466 | 准确率: 0.9668\n",
      "\n",
      "Epoch 171/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0435 | 准确率: 0.4215\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1483 | 准确率: 0.9668\n",
      "\n",
      "Epoch 172/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0386 | 准确率: 0.4223\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1466 | 准确率: 0.9672\n",
      "\n",
      "Epoch 173/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.22it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0422 | 准确率: 0.4218\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1451 | 准确率: 0.9675\n",
      "\n",
      "Epoch 174/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.22it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0383 | 准确率: 0.4228\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1481 | 准确率: 0.9667\n",
      "\n",
      "Epoch 175/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.21it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0376 | 准确率: 0.4229\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1482 | 准确率: 0.9670\n",
      "\n",
      "Epoch 176/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0396 | 准确率: 0.4225\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1453 | 准确率: 0.9672\n",
      "\n",
      "Epoch 177/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0407 | 准确率: 0.4220\n",
      "验证集 - 损失: 0.1472 | 准确率: 0.9668\n",
      "\n",
      "Epoch 178/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0381 | 准确率: 0.4233\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1478 | 准确率: 0.9668\n",
      "\n",
      "Epoch 179/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:21<00:00,  4.28it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0388 | 准确率: 0.4229\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1487 | 准确率: 0.9669\n",
      "\n",
      "Epoch 180/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0379 | 准确率: 0.4227\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1468 | 准确率: 0.9671\n",
      "\n",
      "Epoch 181/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0409 | 准确率: 0.4224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1460 | 准确率: 0.9674\n",
      "\n",
      "Epoch 182/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.25it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0401 | 准确率: 0.4222\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1477 | 准确率: 0.9668\n",
      "\n",
      "Epoch 183/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0397 | 准确率: 0.4229\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1452 | 准确率: 0.9671\n",
      "\n",
      "Epoch 184/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.21it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0394 | 准确率: 0.4224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1458 | 准确率: 0.9671\n",
      "\n",
      "Epoch 185/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.21it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0389 | 准确率: 0.4223\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1489 | 准确率: 0.9667\n",
      "\n",
      "Epoch 186/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0400 | 准确率: 0.4222\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1467 | 准确率: 0.9671\n",
      "\n",
      "Epoch 187/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.27it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0405 | 准确率: 0.4214\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1461 | 准确率: 0.9671\n",
      "\n",
      "Epoch 188/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.22it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0412 | 准确率: 0.4224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1472 | 准确率: 0.9672\n",
      "\n",
      "Epoch 189/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.24it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0376 | 准确率: 0.4224\n",
      "验证集 - 损失: 0.1480 | 准确率: 0.9671\n",
      "\n",
      "Epoch 190/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.21it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0387 | 准确率: 0.4221\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1462 | 准确率: 0.9669\n",
      "\n",
      "Epoch 191/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.23it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0384 | 准确率: 0.4225\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1444 | 准确率: 0.9672\n",
      "\n",
      "Epoch 192/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.20it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0387 | 准确率: 0.4222\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1484 | 准确率: 0.9671\n",
      "\n",
      "Epoch 193/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.22it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0384 | 准确率: 0.4223\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1465 | 准确率: 0.9675\n",
      "\n",
      "Epoch 194/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.20it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0409 | 准确率: 0.4221\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1461 | 准确率: 0.9675\n",
      "\n",
      "Epoch 195/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.18it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0391 | 准确率: 0.4220\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1443 | 准确率: 0.9675\n",
      "\n",
      "Epoch 196/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.19it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0407 | 准确率: 0.4230\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1466 | 准确率: 0.9666\n",
      "\n",
      "Epoch 197/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.19it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0372 | 准确率: 0.4233\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1473 | 准确率: 0.9670\n",
      "\n",
      "Epoch 198/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.18it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0370 | 准确率: 0.4232\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1464 | 准确率: 0.9669\n",
      "\n",
      "Epoch 199/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0417 | 准确率: 0.4216\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1475 | 准确率: 0.9671\n",
      "\n",
      "Epoch 200/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0394 | 准确率: 0.4234\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1484 | 准确率: 0.9668\n",
      "\n",
      "Epoch 201/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0404 | 准确率: 0.4216\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1472 | 准确率: 0.9670\n",
      "\n",
      "Epoch 202/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0373 | 准确率: 0.4231\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1485 | 准确率: 0.9666\n",
      "\n",
      "Epoch 203/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0387 | 准确率: 0.4225\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1480 | 准确率: 0.9664\n",
      "\n",
      "Epoch 204/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0374 | 准确率: 0.4227\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1462 | 准确率: 0.9674\n",
      "\n",
      "Epoch 205/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0422 | 准确率: 0.4210\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1461 | 准确率: 0.9670\n",
      "\n",
      "Epoch 206/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0403 | 准确率: 0.4215\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1473 | 准确率: 0.9666\n",
      "\n",
      "Epoch 207/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0403 | 准确率: 0.4220\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1454 | 准确率: 0.9675\n",
      "\n",
      "Epoch 208/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0376 | 准确率: 0.4231\n",
      "验证集 - 损失: 0.1462 | 准确率: 0.9671\n",
      "\n",
      "Epoch 209/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0394 | 准确率: 0.4226\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1468 | 准确率: 0.9668\n",
      "\n",
      "Epoch 210/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0403 | 准确率: 0.4227\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1453 | 准确率: 0.9673\n",
      "\n",
      "Epoch 211/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0369 | 准确率: 0.4235\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1459 | 准确率: 0.9673\n",
      "\n",
      "Epoch 212/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0396 | 准确率: 0.4227\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1458 | 准确率: 0.9677\n",
      "→ 保存最佳模型（验证准确率: 0.9677）\n",
      "\n",
      "Epoch 213/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.14it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0405 | 准确率: 0.4221\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1464 | 准确率: 0.9670\n",
      "\n",
      "Epoch 214/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.13it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0416 | 准确率: 0.4221\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1476 | 准确率: 0.9667\n",
      "\n",
      "Epoch 215/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.19it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0410 | 准确率: 0.4219\n",
      "验证集 - 损失: 0.1455 | 准确率: 0.9672\n",
      "\n",
      "Epoch 216/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.19it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0412 | 准确率: 0.4225\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1458 | 准确率: 0.9679\n",
      "→ 保存最佳模型（验证准确率: 0.9679）\n",
      "\n",
      "Epoch 217/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.12it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0381 | 准确率: 0.4231\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1457 | 准确率: 0.9667\n",
      "\n",
      "Epoch 218/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0392 | 准确率: 0.4223\n",
      "验证集 - 损失: 0.1491 | 准确率: 0.9666\n",
      "\n",
      "Epoch 219/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0412 | 准确率: 0.4222\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1489 | 准确率: 0.9670\n",
      "\n",
      "Epoch 220/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0382 | 准确率: 0.4234\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1480 | 准确率: 0.9665\n",
      "\n",
      "Epoch 221/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.14it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0400 | 准确率: 0.4224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1469 | 准确率: 0.9674\n",
      "\n",
      "Epoch 222/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0417 | 准确率: 0.4220\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1477 | 准确率: 0.9666\n",
      "\n",
      "Epoch 223/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0396 | 准确率: 0.4224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1446 | 准确率: 0.9670\n",
      "\n",
      "Epoch 224/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.14it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0408 | 准确率: 0.4223\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1462 | 准确率: 0.9671\n",
      "\n",
      "Epoch 225/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.14it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0421 | 准确率: 0.4215\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1474 | 准确率: 0.9669\n",
      "\n",
      "Epoch 226/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.14it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0411 | 准确率: 0.4216\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1451 | 准确率: 0.9671\n",
      "\n",
      "Epoch 227/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0383 | 准确率: 0.4230\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1462 | 准确率: 0.9671\n",
      "\n",
      "Epoch 228/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0394 | 准确率: 0.4224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1443 | 准确率: 0.9673\n",
      "\n",
      "Epoch 229/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.18it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0384 | 准确率: 0.4223\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1446 | 准确率: 0.9672\n",
      "\n",
      "Epoch 230/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0419 | 准确率: 0.4219\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1455 | 准确率: 0.9673\n",
      "\n",
      "Epoch 231/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0374 | 准确率: 0.4230\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1452 | 准确率: 0.9670\n",
      "\n",
      "Epoch 232/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.13it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0394 | 准确率: 0.4224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1448 | 准确率: 0.9672\n",
      "\n",
      "Epoch 233/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0354 | 准确率: 0.4238\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1459 | 准确率: 0.9670\n",
      "\n",
      "Epoch 234/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0390 | 准确率: 0.4229\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1461 | 准确率: 0.9673\n",
      "\n",
      "Epoch 235/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0414 | 准确率: 0.4217\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1460 | 准确率: 0.9668\n",
      "\n",
      "Epoch 236/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0386 | 准确率: 0.4225\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1457 | 准确率: 0.9668\n",
      "\n",
      "Epoch 237/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0414 | 准确率: 0.4221\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1452 | 准确率: 0.9673\n",
      "\n",
      "Epoch 238/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.19it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0403 | 准确率: 0.4218\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1464 | 准确率: 0.9666\n",
      "\n",
      "Epoch 239/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.19it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0387 | 准确率: 0.4229\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1460 | 准确率: 0.9670\n",
      "\n",
      "Epoch 240/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.20it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0416 | 准确率: 0.4223\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1465 | 准确率: 0.9676\n",
      "\n",
      "Epoch 241/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.20it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0404 | 准确率: 0.4223\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1458 | 准确率: 0.9674\n",
      "\n",
      "Epoch 242/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.18it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0395 | 准确率: 0.4223\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1464 | 准确率: 0.9671\n",
      "\n",
      "Epoch 243/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.18it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0385 | 准确率: 0.4219\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1450 | 准确率: 0.9666\n",
      "\n",
      "Epoch 244/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.18it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0386 | 准确率: 0.4226\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1492 | 准确率: 0.9670\n",
      "\n",
      "Epoch 245/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0382 | 准确率: 0.4228\n",
      "验证集 - 损失: 0.1491 | 准确率: 0.9662\n",
      "\n",
      "Epoch 246/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0376 | 准确率: 0.4226\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1465 | 准确率: 0.9670\n",
      "\n",
      "Epoch 247/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0388 | 准确率: 0.4228\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1459 | 准确率: 0.9672\n",
      "\n",
      "Epoch 248/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0406 | 准确率: 0.4218\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1467 | 准确率: 0.9673\n",
      "\n",
      "Epoch 249/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0376 | 准确率: 0.4233\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1471 | 准确率: 0.9674\n",
      "\n",
      "Epoch 250/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0394 | 准确率: 0.4224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1475 | 准确率: 0.9665\n",
      "\n",
      "Epoch 251/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.18it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0394 | 准确率: 0.4224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1459 | 准确率: 0.9673\n",
      "\n",
      "Epoch 252/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0400 | 准确率: 0.4220\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1455 | 准确率: 0.9675\n",
      "\n",
      "Epoch 253/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0379 | 准确率: 0.4232\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1480 | 准确率: 0.9665\n",
      "\n",
      "Epoch 254/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.14it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0401 | 准确率: 0.4223\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1457 | 准确率: 0.9672\n",
      "\n",
      "Epoch 255/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0408 | 准确率: 0.4215\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1467 | 准确率: 0.9670\n",
      "\n",
      "Epoch 256/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0389 | 准确率: 0.4218\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1474 | 准确率: 0.9667\n",
      "\n",
      "Epoch 257/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.18it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0381 | 准确率: 0.4232\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1484 | 准确率: 0.9667\n",
      "\n",
      "Epoch 258/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0397 | 准确率: 0.4224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1458 | 准确率: 0.9669\n",
      "\n",
      "Epoch 259/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.14it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0419 | 准确率: 0.4219\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1457 | 准确率: 0.9670\n",
      "\n",
      "Epoch 260/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.18it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0391 | 准确率: 0.4225\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1470 | 准确率: 0.9670\n",
      "\n",
      "Epoch 261/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0393 | 准确率: 0.4218\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1462 | 准确率: 0.9672\n",
      "\n",
      "Epoch 262/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.19it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0380 | 准确率: 0.4224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1485 | 准确率: 0.9669\n",
      "\n",
      "Epoch 263/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0377 | 准确率: 0.4227\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1446 | 准确率: 0.9670\n",
      "\n",
      "Epoch 264/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.18it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0406 | 准确率: 0.4220\n",
      "验证集 - 损失: 0.1471 | 准确率: 0.9672\n",
      "\n",
      "Epoch 265/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0403 | 准确率: 0.4220\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1462 | 准确率: 0.9670\n",
      "\n",
      "Epoch 266/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.19it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0384 | 准确率: 0.4228\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1448 | 准确率: 0.9678\n",
      "\n",
      "Epoch 267/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.18it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0383 | 准确率: 0.4225\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1459 | 准确率: 0.9672\n",
      "\n",
      "Epoch 268/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0391 | 准确率: 0.4223\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1481 | 准确率: 0.9672\n",
      "\n",
      "Epoch 269/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0423 | 准确率: 0.4216\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1445 | 准确率: 0.9673\n",
      "\n",
      "Epoch 270/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0384 | 准确率: 0.4225\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1475 | 准确率: 0.9666\n",
      "\n",
      "Epoch 271/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.14it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0374 | 准确率: 0.4231\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1483 | 准确率: 0.9664\n",
      "\n",
      "Epoch 272/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0393 | 准确率: 0.4224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1457 | 准确率: 0.9672\n",
      "\n",
      "Epoch 273/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0399 | 准确率: 0.4224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1449 | 准确率: 0.9677\n",
      "\n",
      "Epoch 274/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.13it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0386 | 准确率: 0.4220\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1455 | 准确率: 0.9672\n",
      "\n",
      "Epoch 275/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0412 | 准确率: 0.4218\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1449 | 准确率: 0.9673\n",
      "\n",
      "Epoch 276/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.13it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0399 | 准确率: 0.4222\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1483 | 准确率: 0.9666\n",
      "\n",
      "Epoch 277/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.12it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0369 | 准确率: 0.4228\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1492 | 准确率: 0.9670\n",
      "\n",
      "Epoch 278/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0394 | 准确率: 0.4224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1500 | 准确率: 0.9665\n",
      "\n",
      "Epoch 279/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0397 | 准确率: 0.4220\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1450 | 准确率: 0.9672\n",
      "\n",
      "Epoch 280/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0371 | 准确率: 0.4234\n",
      "验证集 - 损失: 0.1454 | 准确率: 0.9674\n",
      "\n",
      "Epoch 281/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0389 | 准确率: 0.4224\n",
      "验证集 - 损失: 0.1454 | 准确率: 0.9670\n",
      "\n",
      "Epoch 282/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.14it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0413 | 准确率: 0.4216\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1461 | 准确率: 0.9673\n",
      "\n",
      "Epoch 283/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.21it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0401 | 准确率: 0.4220\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1463 | 准确率: 0.9675\n",
      "\n",
      "Epoch 284/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0408 | 准确率: 0.4229\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1461 | 准确率: 0.9669\n",
      "\n",
      "Epoch 285/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0402 | 准确率: 0.4226\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1466 | 准确率: 0.9673\n",
      "\n",
      "Epoch 286/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.18it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0373 | 准确率: 0.4231\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1447 | 准确率: 0.9672\n",
      "\n",
      "Epoch 287/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.19it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0396 | 准确率: 0.4226\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1481 | 准确率: 0.9672\n",
      "\n",
      "Epoch 288/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0407 | 准确率: 0.4223\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1498 | 准确率: 0.9669\n",
      "\n",
      "Epoch 289/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.19it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0405 | 准确率: 0.4224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1473 | 准确率: 0.9673\n",
      "\n",
      "Epoch 290/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0396 | 准确率: 0.4223\n",
      "验证集 - 损失: 0.1469 | 准确率: 0.9674\n",
      "\n",
      "Epoch 291/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0409 | 准确率: 0.4218\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1448 | 准确率: 0.9671\n",
      "\n",
      "Epoch 292/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0401 | 准确率: 0.4224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1461 | 准确率: 0.9673\n",
      "\n",
      "Epoch 293/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0371 | 准确率: 0.4223\n",
      "验证集 - 损失: 0.1475 | 准确率: 0.9669\n",
      "\n",
      "Epoch 294/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.13it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0381 | 准确率: 0.4232\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1458 | 准确率: 0.9669\n",
      "\n",
      "Epoch 295/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.16it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0371 | 准确率: 0.4234\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1471 | 准确率: 0.9672\n",
      "\n",
      "Epoch 296/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.12it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0388 | 准确率: 0.4227\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1451 | 准确率: 0.9672\n",
      "\n",
      "Epoch 297/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0405 | 准确率: 0.4226\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1479 | 准确率: 0.9666\n",
      "\n",
      "Epoch 298/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0386 | 准确率: 0.4231\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1468 | 准确率: 0.9671\n",
      "\n",
      "Epoch 299/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.15it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0397 | 准确率: 0.4220\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1443 | 准确率: 0.9673\n",
      "\n",
      "Epoch 300/300\n",
      "------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "训练批次: 100%|██████████| 94/94 [00:22<00:00,  4.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 - 损失: 0.0391 | 准确率: 0.4226\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集 - 损失: 0.1456 | 准确率: 0.9673\n",
      "\n",
      "训练完成！最佳验证准确率: 0.9679\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAHqCAYAAADVi/1VAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAyidJREFUeJzs3XlcVPX6B/DPmQFmWAREFlFAXHIrc8E0KwVLIzOvipWtuPvLxI3bRiqImt6yTDO73luuZWma2qJZioJa3tzSrBRzRU0QJBZRtjnn98c0IyMDzHDmzAzweb9evGDO+Z7veeYB9fjwXQRJkiQQERERERERERHZkcrRARARERERERERUcPDohQREREREREREdkdi1JERERERERERGR3LEoREREREREREZHdsShFRERERERERER2x6IUERERERERERHZHYtSRERERERERERkdyxKERERERERERGR3bEoRUREREREREREdseiFBHVaatWrYIgCDh06JCjQyEiIiJSBJ93iKi+YlGKiKpleAiq6uN///ufo0Osc/hgSURE5Fz4vKOsDz74AIIgoGfPno4OhYicjIujAyCiumH27Nlo2bJlpeNt2rRxQDREREREtsfnHWWsXbsW4eHhOHDgAE6fPs18EpERi1JEZJEBAwage/fujg6DiIiISDF83rG9c+fO4ccff8SmTZvwf//3f1i7di2SkpIcHZZZRUVF8PT0dHQYRA0Kp+8RkU2cP38egiDg7bffxrvvvosWLVrA3d0dkZGR+PXXXyu137VrF3r37g1PT0/4+vpi8ODBOHHiRKV2ly9fxpgxY9CsWTNoNBq0bNkSEyZMQGlpqUm7kpISxMfHIyAgAJ6enhg6dCiys7Orjfntt9+GIAi4cOFCpXMJCQlwc3PDX3/9BQD4448/MGzYMDRt2hRarRYhISF46qmnkJ+fb02arPLzzz9jwIAB8Pb2hpeXFx566KFK0wfKysqQnJyMO+64A1qtFk2aNMEDDzyAHTt2GNtkZmZi1KhRCAkJgUajQXBwMAYPHozz588rFjsREVF9xOcd661duxaNGzfGwIED8fjjj2Pt2rVm2+Xl5WHatGkIDw+HRqNBSEgIYmNjkZOTY2xTXFyMWbNmoW3bttBqtQgODkZMTAzOnDkDAEhNTYUgCEhNTTXp2/B9W7VqlfHYyJEj4eXlhTNnzuDRRx9Fo0aN8OyzzwIA9u7diyeeeAJhYWHQaDQIDQ3FtGnTcPPmzUpxnzx5Ek8++SQCAgLg7u6Odu3aYfr06QCA3bt3QxAEbN68udJ1n376KQRBwP79+63KJ1F9w5FSRGSR/Px8k4cCABAEAU2aNDE5tmbNGhQWFmLixIkoLi7G4sWL8eCDD+L48eMICgoCAOzcuRMDBgxAq1atMGvWLNy8eRNLlizB/fffjyNHjiA8PBwA8Oeff6JHjx7Iy8vD+PHj0b59e1y+fBkbN27EjRs34ObmZrzvpEmT0LhxYyQlJeH8+fNYtGgR4uLisH79+irf05NPPolXXnkFn3/+OV5++WWTc59//jkefvhhNG7cGKWlpYiOjkZJSQkmTZqEpk2b4vLly/jmm2+Ql5cHHx8fOak167fffkPv3r3h7e2NV155Ba6urvjPf/6DqKgopKWlGddkmDVrFubPn4+xY8eiR48eKCgowKFDh3DkyBH0798fADBs2DD89ttvmDRpEsLDw3H16lXs2LEDGRkZxlwTERERn3eUeN5Zu3YtYmJi4Obmhqeffhr//ve/cfDgQdxzzz3GNtevX0fv3r1x4sQJjB49Gt26dUNOTg6++uorXLp0Cf7+/tDpdHjssceQkpKCp556ClOmTEFhYSF27NiBX3/9Fa1bt7Y6tvLyckRHR+OBBx7A22+/DQ8PDwDAhg0bcOPGDUyYMAFNmjTBgQMHsGTJEly6dAkbNmwwXv/LL7+gd+/ecHV1xfjx4xEeHo4zZ87g66+/xhtvvIGoqCiEhoZi7dq1GDp0aKW8tG7dGr169apVXonqDYmIqBorV66UAJj90Gg0xnbnzp2TAEju7u7SpUuXjMd/+uknCYA0bdo047EuXbpIgYGB0rVr14zHjh07JqlUKik2NtZ4LDY2VlKpVNLBgwcrxSWKokl8/fr1Mx6TJEmaNm2apFarpby8vGrfX69evaSIiAiTYwcOHJAASGvWrJEkSZJ+/vlnCYC0YcOGavuylCFmc+/LYMiQIZKbm5t05swZ47E///xTatSokdSnTx/jsc6dO0sDBw6ssp+//vpLAiAtWLDAJrETERHVR3zesf3zjiRJ0qFDhyQA0o4dO4zvJyQkRJoyZYpJu8TERAmAtGnTpkp9GN7vihUrJADSwoULq2yze/duCYC0e/duk/OG79vKlSuNx0aMGCEBkF577bVK/d24caPSsfnz50uCIEgXLlwwHuvTp4/UqFEjk2MV45EkSUpISJA0Go3J9+jq1auSi4uLlJSUVOk+RA0Np+8RkUWWLl2KHTt2mHx8++23ldoNGTIEzZs3N77u0aMHevbsiW3btgEArly5gqNHj2LkyJHw8/Mztrv77rvRv39/YztRFLFlyxYMGjTI7NoOgiCYvB4/frzJsd69e0On05kdql7R8OHDcfjwYeOwbwBYv349NBoNBg8eDADG3wx+9913uHHjRrX92YJOp8P333+PIUOGoFWrVsbjwcHBeOaZZ7Bv3z4UFBQAAHx9ffHbb7/hjz/+MNuXu7s73NzckJqaahyaT0RERObxece2zztr165FUFAQ+vbta3w/w4cPx7p166DT6YztvvjiC3Tu3LnSaCLDNYY2/v7+mDRpUpVtamPChAmVjrm7uxu/LioqQk5ODu677z5IkoSff/4ZAJCdnY09e/Zg9OjRCAsLqzKe2NhYlJSUYOPGjcZj69evR3l5OZ577rlax01UX7AoRUQW6dGjB/r162fyYXjAqOiOO+6odKxt27bG9YsMD03t2rWr1K5Dhw7IyclBUVERsrOzUVBQgLvuusui+G5/GGjcuDEA1FiIeeKJJ6BSqYzD3iVJwoYNG4xrOQFAy5YtER8fj48++gj+/v6Ijo7G0qVLFVtPKjs7Gzdu3KgyR6Io4uLFiwD0uwTl5eWhbdu26NSpE15++WX88ssvxvYajQZvvvkmvv32WwQFBaFPnz546623kJmZqUjsREREdRmfd2z3vKPT6bBu3Tr07dsX586dw+nTp3H69Gn07NkTWVlZSElJMbY9c+ZMjTk4c+YM2rVrBxcX261A4+LigpCQkErHMzIyjAVFLy8vBAQEIDIyEgCM+Th79iwA1Bh3+/btcc8995ispbV27Vrce++93IWQCCxKEVE9oVarzR6XJKna65o1a4bevXvj888/BwD873//Q0ZGBoYPH27S7p133sEvv/yC119/HTdv3sTkyZNx55134tKlS7Z5A7XUp08fnDlzBitWrMBdd92Fjz76CN26dcNHH31kbDN16lScOnUK8+fPh1arxcyZM9GhQwfjb/qIiIiobqhLzzu7du3ClStXsG7dOtxxxx3GjyeffBIAqlzwXI6qRkxVHJVVkUajgUqlqtS2f//+2Lp1K159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S5cu2L59u3Hx84yMDJNcFBcXY8aMGTh79iy8vLzw6KOP4uOPP4avr6+D3oFzYUGKiIjIMViUsjWOlCIiIiI7iIuLq3K63u07FkdGRuL333+3Q1R1j6MKUuEPhuP87vOISmZBioiIGi4WpWyMC50TEREROT9Hjo7iyCgiIiK9hjHG3Z4qjpSSJMfGQkRERESVsCBFRETkHDhSysYktfrWC53u1m58RERERORwjipIsRhFRERUGUdK2VrFBXg5hY+IiIjIabAgRURE5FxYlLIxqeLIKBaliIiIiJwCC1JERETOh3PLbI0jpYiIiIicipIFqfAHw3F+1/lKx1mMIiIiqhlHStlaxTWlyssdFwcRERERAQBSk1Jt2p9vS19A0BeeRqSMQNTsKJPzLEgRERFZhiOlbE0QILm6Qigr40gpIiIiIicQlRxls5FSvi19MeXsFJNjhgJUalIqopJZkCIiIrIUR0opwTCFj0UpIiIiIoc7n3reZn3lnctD2py0SscjZ0YiSUxiQYqIiMgKLEopwbDYOYtSRERERA61+qHVZtd8ksPW0wGJiIgaKhallMCRUkREREQOlzYnzeYFKUA/HZCIiIjkY1FKCSxKERERETmUUjvucRFzIiIi22FRSgksShERERE5TG0LUlpfbbXnWZAiIiKyLe6+pwQWpYiIiIjsLm1Omn69J8n6aw276lVV0GJBioiIyPZYlFICi1JEREREdiV3ul7e+TwAMBaeKvbFghQREZEyOH1PCYaiVHm5Y+MgIiIiagBssX5UxcXLI2dGImp2FCCwIEVERKQkjpRSAkdKEREREdmFTQpSZgpPkTMjWYwiIiJSGItSSnD5O60sShEREREpwla763EkFBERkeNw+p4SOFKKiIiISDEsSBEREdUPLEopgUUpIiIiIkWwIEVERFR/sCilBE7fIyIiIrI5WxWkiIiIyDmwKKUEjpQiIiIisilbF6RSE1ORNifNZv0RERGR9ViUUgKLUkREREQ2o9QIqdQk2/dJRERElmNRSgmGolR5uWPjICIiIqoHlCoeRSVHKdIvERERWYZFKSVwTSkiIiIim1GieMSFzomIiByPRSklcPoeERERkc1EzoxE1Owom/XHghQREZFzYFFKCSxKEREREdmUrQpTLEgRERE5DxallMCiFBEREZHNyS1MsSBFRETkXFiUUgKLUkRE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27fHvn37dIuZJyYmGgSoW7duiIqKwqJFi/D2228jMDAQ3333Hdq0aWOtSyAiIiIiIiIiogqyelIKAGbNmlXqdL24uLgS21566SW89NJLVdwqIiIiIiIiIiKqKhzjRkREREREREREFlctRkpZkhACgPQUPnPTaDTIzMy0+pzMmorxk4fxk4fxk4fxk4fxk6eq46ftM2j7EHVVVfWheP/Lw/jJw/jJw/jJw/jJw/jJU136T3UuKZWZmQkAaNy4sZVbQkRERDVJZmYm3N3drd0Mq2EfioiIiCqqvP6TQtSxf/bTaDS4e/cuXF1doVAozFp3RkYGGjdujKSkJLi5uZm17rqA8ZOH8ZOH8ZOH8ZOH8ZOnquMnhEBmZiYaNGhQp/8ltqr6ULz/5WH85GH85GH85GH85GH85Kku/ac6N1JKqVSiUaNGVXoONzc3filkYPzkYfzkYfzkYfzkYfzkqcr41eURUlpV3Yfi/S8P4ycP4ycP4ycP4ycP4yePtftPdfef+4iIiIiIiIiIyGqYlCIiIiIiIiIiIotjUsqM7O3tsXTpUtjb21u7KTUS4ycP4ycP4ycP4ycP4ycP41ez8fOTh/GTh/GTh/GTh/GTh/GTp7rEr84tdE5ERERERERERNbHkVJERERERERERGRxTEoREREREREREZHFMSlFREREREREREQWx6SUmWzevBkBAQFwcHBA165dcerUKWs3qVpatmwZFAqFwatly5a6/bm5uZg5cybq1asHFxcXjBgxAvfu3bNii63rl19+weDBg9GgQQMoFAp89913BvuFEFiyZAn8/f3h6OiI0NBQXL9+3aDMw4cPMW7cOLi5ucHDwwNTpkxBVlaWBa/CesqL36RJk0rcjwMGDDAoU1fjt3r1anTu3Bmurq7w9fXF0KFDce3aNYMypnxfExMT8cILL8DJyQm+vr544403UFhYaMlLsQpT4terV68S99/06dMNytTV+AHAli1b0K5dO7i5ucHNzQ0hISH4+eefdft5/9Ue7EOVj/2nimH/SR72n+RhH0oe9qHkqYn9JyalzODLL7/EvHnzsHTpUpw7dw7BwcEICwtDamqqtZtWLbVu3RrJycm616+//qrb989//hPff/89du/ejSNHjuDu3bsYPny4FVtrXdnZ2QgODsbmzZuN7n/vvffw73//G1u3bsXJkyfh7OyMsLAw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XLlyBcHBwXB2dtbtf+6556DRaHDt2jUoFArcvXsXffv2LbMN7dq10/3s7OwMNzc3pKamVvaSiIiIiKoU+09EVB0wKUVENZ6zs3OJ4eDm4ujoaFI5W1tbg/cKhQIajaYqmkREREQkG/tPRFQdcE0pIqr1Tpw4UeJ9UFAQACAoKAi//fYbsrOzdfvj4+OhVCrRokULuLq6IiAgADExMRZtMxEREZE1sf9ERJbAkVJEVOPl5eUhJSXFYJuNjQ28vb0BALt370anTp3w/PPP44svvsCpU6ewbds2AMC4ceOwdOlShIeHY9myZUhLS8Ps2bMxYcIE1K9fHwCwbNkyTJ8+Hb6+vhg4cCAyMzMRHx+P2bNnW/ZCiYiIiMyE/Sciqg6YlCKiGm/fvn3w9/c32NaiRQtcvXoVgPRkl127dmHGjBnw9/fHzp070apVKwCAk5MT9u/fjzlz5qBz585wcnLCiBEjsH79el1d4eHhyM3NxYcffoj58+fD29sbI0eOtNwFEhEREZkZ+09EVB0ohBDC2o0gIqoqCoUCe/bswdChQ63dFCIiIqIagf0nIrIUrilFREREREREREQWx6QUERERERERERFZHKfvERERERERERGRxXGkFBERERERERERWRyTUkREREREREREZHFMShERERERERERkcUxKUVERERERERERBbHpBQREREREREREVkck1JERERERERERGRxTEoREREREREREZHFMSlFREREREREREQWx6QUERERERERERFZ3P8HgYb1JuOqQesAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1200x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "开始测试...\n",
      "\n",
      "各类别准确率：\n",
      "→ airplane: 91.80%\n",
      "→ automobile: 95.90%\n",
      "→ bird: 89.40%\n",
      "→ cat: 82.50%\n",
      "→ deer: 93.60%\n",
      "→ dog: 86.50%\n",
      "→ frog: 94.40%\n",
      "→ horse: 94.30%\n",
      "→ ship: 96.40%\n",
      "→ truck: 95.10%\n",
      "\n",
      "总体测试准确率: 0.9199\n"
     ]
    }
   ],
   "source": [
    "# 数据预处理与增强（CIFAR-10专用）\n",
    "train_transform = transforms.Compose([\n",
    "    transforms.RandomCrop(32, padding=4),\n",
    "    transforms.RandomHorizontalFlip(),\n",
    "    transforms.RandomRotation(15),\n",
    "    transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2),\n",
    "    transforms.ToTensor(),\n",
    "    transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2470, 0.2435, 0.2616))\n",
    "])\n",
    "\n",
    "test_transform = transforms.Compose([\n",
    "    transforms.ToTensor(),\n",
    "    transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2470, 0.2435, 0.2616))\n",
    "])\n",
    "\n",
    "# 加载CIFAR-10数据集\n",
    "full_train_dataset = datasets.CIFAR10(\n",
    "    root='./data', train=True, download=True, transform=train_transform\n",
    ")\n",
    "test_dataset = datasets.CIFAR10(\n",
    "    root='./data', train=False, download=True, transform=test_transform\n",
    ")\n",
    "\n",
    "# 划分训练集为：训练集（80%）和验证集（20%）\n",
    "train_size = int(0.8 * len(full_train_dataset))\n",
    "val_size = len(full_train_dataset) - train_size\n",
    "train_dataset, _ = random_split(\n",
    "    full_train_dataset, [train_size, val_size],\n",
    "    generator=torch.Generator().manual_seed(seed)\n",
    ")\n",
    "\n",
    "# 验证集单独加载（用测试变换，避免数据增强）\n",
    "val_dataset = datasets.CIFAR10(\n",
    "    root='./data', train=True, download=True, transform=test_transform\n",
    ")\n",
    "val_dataset.data = val_dataset.data[val_size:]  # 取后20%作为验证集\n",
    "val_dataset.targets = val_dataset.targets[val_size:]\n",
    "\n",
    "# 划分有标签和无标签数据（训练集的30%作为无标签）\n",
    "unlabeled_size = int(0.3 * train_size)\n",
    "labeled_size = train_size - unlabeled_size\n",
    "labeled_indices = list(range(labeled_size))\n",
    "unlabeled_indices = list(range(labeled_size, train_size))\n",
    "\n",
    "labeled_dataset = torch.utils.data.Subset(train_dataset, labeled_indices)\n",
    "unlabeled_dataset = torch.utils.data.Subset(train_dataset, unlabeled_indices)\n",
    "\n",
    "# 创建数据加载器\n",
    "batch_size = 128\n",
    "train_loader = DataLoader(labeled_dataset, batch_size=batch_size, shuffle=True, num_workers=8, pin_memory=True, prefetch_factor=4)\n",
    "val_loader = DataLoader(val_dataset, batch_size=batch_size, shuffle=False, num_workers=8, pin_memory=True, prefetch_factor=4)\n",
    "test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False, num_workers=8, pin_memory=True, prefetch_factor=4)\n",
    "unlabeled_loader = DataLoader(unlabeled_dataset, batch_size=batch_size, shuffle=True, num_workers=8, pin_memory=True, prefetch_factor=4)\n",
    "\n",
    "# 打印数据集大小\n",
    "print(f\"数据集大小：\")\n",
    "print(f\"→ 有标签训练集: {len(train_loader.dataset)}\")\n",
    "print(f\"→ 无标签训练集: {len(unlabeled_loader.dataset)}\")\n",
    "print(f\"→ 验证集: {len(val_loader.dataset)}\")\n",
    "print(f\"→ 测试集: {len(test_loader.dataset)}\")\n",
    "\n",
    "# 初始化模型\n",
    "model = ResNet18WithCBAM(num_classes=10).to(device)\n",
    "\n",
    "# 训练模型\n",
    "num_epochs = 300\n",
    "learning_rate = 0.001\n",
    "print(f\"\\n开始训练（{num_epochs}轮，学习率{learning_rate}）...\")\n",
    "model = train_model(model, train_loader, val_loader, unlabeled_loader, num_epochs, learning_rate, batch_size)\n",
    "\n",
    "# 测试模型\n",
    "print(\"\\n开始测试...\")\n",
    "test_acc = test_model(model, test_loader)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 9. 模型结构"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecutionIndicator": {
     "show": true
    },
    "execution": {
     "iopub.execute_input": "2025-08-23T12:45:40.472449Z",
     "iopub.status.busy": "2025-08-23T12:45:40.471871Z",
     "iopub.status.idle": "2025-08-23T12:45:40.553882Z",
     "shell.execute_reply": "2025-08-23T12:45:40.553453Z",
     "shell.execute_reply.started": "2025-08-23T12:45:40.472335Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "模型结构参数：\n",
      "----------------------------------------------------------------\n",
      "        Layer (type)               Output Shape         Param #\n",
      "================================================================\n",
      "            Conv2d-1           [-1, 64, 32, 32]           1,728\n",
      "       BatchNorm2d-2           [-1, 64, 32, 32]             128\n",
      "              ReLU-3           [-1, 64, 32, 32]               0\n",
      "          Identity-4           [-1, 64, 32, 32]               0\n",
      "            Conv2d-5           [-1, 64, 32, 32]          36,864\n",
      "       BatchNorm2d-6           [-1, 64, 32, 32]             128\n",
      "              ReLU-7           [-1, 64, 32, 32]               0\n",
      "            Conv2d-8           [-1, 64, 32, 32]          36,864\n",
      "       BatchNorm2d-9           [-1, 64, 32, 32]             128\n",
      "AdaptiveAvgPool2d-10             [-1, 64, 1, 1]               0\n",
      "           Conv2d-11              [-1, 4, 1, 1]             256\n",
      "             ReLU-12              [-1, 4, 1, 1]               0\n",
      "           Conv2d-13             [-1, 64, 1, 1]             256\n",
      "AdaptiveMaxPool2d-14             [-1, 64, 1, 1]               0\n",
      "           Conv2d-15              [-1, 4, 1, 1]             256\n",
      "             ReLU-16              [-1, 4, 1, 1]               0\n",
      "           Conv2d-17             [-1, 64, 1, 1]             256\n",
      "          Sigmoid-18             [-1, 64, 1, 1]               0\n",
      " ChannelAttention-19           [-1, 64, 32, 32]               0\n",
      "           Conv2d-20            [-1, 1, 32, 32]              18\n",
      "          Sigmoid-21            [-1, 1, 32, 32]               0\n",
      " SpatialAttention-22           [-1, 64, 32, 32]               0\n",
      "             CBAM-23           [-1, 64, 32, 32]               0\n",
      "             ReLU-24           [-1, 64, 32, 32]               0\n",
      "       BasicBlock-25           [-1, 64, 32, 32]               0\n",
      "           Conv2d-26           [-1, 64, 32, 32]          36,864\n",
      "      BatchNorm2d-27           [-1, 64, 32, 32]             128\n",
      "             ReLU-28           [-1, 64, 32, 32]               0\n",
      "           Conv2d-29           [-1, 64, 32, 32]          36,864\n",
      "      BatchNorm2d-30           [-1, 64, 32, 32]             128\n",
      "AdaptiveAvgPool2d-31             [-1, 64, 1, 1]               0\n",
      "           Conv2d-32              [-1, 4, 1, 1]             256\n",
      "             ReLU-33              [-1, 4, 1, 1]               0\n",
      "           Conv2d-34             [-1, 64, 1, 1]             256\n",
      "AdaptiveMaxPool2d-35             [-1, 64, 1, 1]               0\n",
      "           Conv2d-36              [-1, 4, 1, 1]             256\n",
      "             ReLU-37              [-1, 4, 1, 1]               0\n",
      "           Conv2d-38             [-1, 64, 1, 1]             256\n",
      "          Sigmoid-39             [-1, 64, 1, 1]               0\n",
      " ChannelAttention-40           [-1, 64, 32, 32]               0\n",
      "           Conv2d-41            [-1, 1, 32, 32]              18\n",
      "          Sigmoid-42            [-1, 1, 32, 32]               0\n",
      " SpatialAttention-43           [-1, 64, 32, 32]               0\n",
      "             CBAM-44           [-1, 64, 32, 32]               0\n",
      "             ReLU-45           [-1, 64, 32, 32]               0\n",
      "       BasicBlock-46           [-1, 64, 32, 32]               0\n",
      "           Conv2d-47          [-1, 128, 16, 16]          73,728\n",
      "      BatchNorm2d-48          [-1, 128, 16, 16]             256\n",
      "             ReLU-49          [-1, 128, 16, 16]               0\n",
      "           Conv2d-50          [-1, 128, 16, 16]         147,456\n",
      "      BatchNorm2d-51          [-1, 128, 16, 16]             256\n",
      "AdaptiveAvgPool2d-52            [-1, 128, 1, 1]               0\n",
      "           Conv2d-53              [-1, 8, 1, 1]           1,024\n",
      "             ReLU-54              [-1, 8, 1, 1]               0\n",
      "           Conv2d-55            [-1, 128, 1, 1]           1,024\n",
      "AdaptiveMaxPool2d-56            [-1, 128, 1, 1]               0\n",
      "           Conv2d-57              [-1, 8, 1, 1]           1,024\n",
      "             ReLU-58              [-1, 8, 1, 1]               0\n",
      "           Conv2d-59            [-1, 128, 1, 1]           1,024\n",
      "          Sigmoid-60            [-1, 128, 1, 1]               0\n",
      " ChannelAttention-61          [-1, 128, 16, 16]               0\n",
      "           Conv2d-62            [-1, 1, 16, 16]              18\n",
      "          Sigmoid-63            [-1, 1, 16, 16]               0\n",
      " SpatialAttention-64          [-1, 128, 16, 16]               0\n",
      "             CBAM-65          [-1, 128, 16, 16]               0\n",
      "           Conv2d-66          [-1, 128, 16, 16]           8,192\n",
      "      BatchNorm2d-67          [-1, 128, 16, 16]             256\n",
      "             ReLU-68          [-1, 128, 16, 16]               0\n",
      "       BasicBlock-69          [-1, 128, 16, 16]               0\n",
      "           Conv2d-70          [-1, 128, 16, 16]         147,456\n",
      "      BatchNorm2d-71          [-1, 128, 16, 16]             256\n",
      "             ReLU-72          [-1, 128, 16, 16]               0\n",
      "           Conv2d-73          [-1, 128, 16, 16]         147,456\n",
      "      BatchNorm2d-74          [-1, 128, 16, 16]             256\n",
      "AdaptiveAvgPool2d-75            [-1, 128, 1, 1]               0\n",
      "           Conv2d-76              [-1, 8, 1, 1]           1,024\n",
      "             ReLU-77              [-1, 8, 1, 1]               0\n",
      "           Conv2d-78            [-1, 128, 1, 1]           1,024\n",
      "AdaptiveMaxPool2d-79            [-1, 128, 1, 1]               0\n",
      "           Conv2d-80              [-1, 8, 1, 1]           1,024\n",
      "             ReLU-81              [-1, 8, 1, 1]               0\n",
      "           Conv2d-82            [-1, 128, 1, 1]           1,024\n",
      "          Sigmoid-83            [-1, 128, 1, 1]               0\n",
      " ChannelAttention-84          [-1, 128, 16, 16]               0\n",
      "           Conv2d-85            [-1, 1, 16, 16]              18\n",
      "          Sigmoid-86            [-1, 1, 16, 16]               0\n",
      " SpatialAttention-87          [-1, 128, 16, 16]               0\n",
      "             CBAM-88          [-1, 128, 16, 16]               0\n",
      "             ReLU-89          [-1, 128, 16, 16]               0\n",
      "       BasicBlock-90          [-1, 128, 16, 16]               0\n",
      "           Conv2d-91            [-1, 256, 8, 8]         294,912\n",
      "      BatchNorm2d-92            [-1, 256, 8, 8]             512\n",
      "             ReLU-93            [-1, 256, 8, 8]               0\n",
      "           Conv2d-94            [-1, 256, 8, 8]         589,824\n",
      "      BatchNorm2d-95            [-1, 256, 8, 8]             512\n",
      "AdaptiveAvgPool2d-96            [-1, 256, 1, 1]               0\n",
      "           Conv2d-97             [-1, 16, 1, 1]           4,096\n",
      "             ReLU-98             [-1, 16, 1, 1]               0\n",
      "           Conv2d-99            [-1, 256, 1, 1]           4,096\n",
      "AdaptiveMaxPool2d-100            [-1, 256, 1, 1]               0\n",
      "          Conv2d-101             [-1, 16, 1, 1]           4,096\n",
      "            ReLU-102             [-1, 16, 1, 1]               0\n",
      "          Conv2d-103            [-1, 256, 1, 1]           4,096\n",
      "         Sigmoid-104            [-1, 256, 1, 1]               0\n",
      "ChannelAttention-105            [-1, 256, 8, 8]               0\n",
      "          Conv2d-106              [-1, 1, 8, 8]              18\n",
      "         Sigmoid-107              [-1, 1, 8, 8]               0\n",
      "SpatialAttention-108            [-1, 256, 8, 8]               0\n",
      "            CBAM-109            [-1, 256, 8, 8]               0\n",
      "          Conv2d-110            [-1, 256, 8, 8]          32,768\n",
      "     BatchNorm2d-111            [-1, 256, 8, 8]             512\n",
      "            ReLU-112            [-1, 256, 8, 8]               0\n",
      "      BasicBlock-113            [-1, 256, 8, 8]               0\n",
      "          Conv2d-114            [-1, 256, 8, 8]         589,824\n",
      "     BatchNorm2d-115            [-1, 256, 8, 8]             512\n",
      "            ReLU-116            [-1, 256, 8, 8]               0\n",
      "          Conv2d-117            [-1, 256, 8, 8]         589,824\n",
      "     BatchNorm2d-118            [-1, 256, 8, 8]             512\n",
      "AdaptiveAvgPool2d-119            [-1, 256, 1, 1]               0\n",
      "          Conv2d-120             [-1, 16, 1, 1]           4,096\n",
      "            ReLU-121             [-1, 16, 1, 1]               0\n",
      "          Conv2d-122            [-1, 256, 1, 1]           4,096\n",
      "AdaptiveMaxPool2d-123            [-1, 256, 1, 1]               0\n",
      "          Conv2d-124             [-1, 16, 1, 1]           4,096\n",
      "            ReLU-125             [-1, 16, 1, 1]               0\n",
      "          Conv2d-126            [-1, 256, 1, 1]           4,096\n",
      "         Sigmoid-127            [-1, 256, 1, 1]               0\n",
      "ChannelAttention-128            [-1, 256, 8, 8]               0\n",
      "          Conv2d-129              [-1, 1, 8, 8]              18\n",
      "         Sigmoid-130              [-1, 1, 8, 8]               0\n",
      "SpatialAttention-131            [-1, 256, 8, 8]               0\n",
      "            CBAM-132            [-1, 256, 8, 8]               0\n",
      "            ReLU-133            [-1, 256, 8, 8]               0\n",
      "      BasicBlock-134            [-1, 256, 8, 8]               0\n",
      "          Conv2d-135            [-1, 512, 4, 4]       1,179,648\n",
      "     BatchNorm2d-136            [-1, 512, 4, 4]           1,024\n",
      "            ReLU-137            [-1, 512, 4, 4]               0\n",
      "          Conv2d-138            [-1, 512, 4, 4]       2,359,296\n",
      "     BatchNorm2d-139            [-1, 512, 4, 4]           1,024\n",
      "AdaptiveAvgPool2d-140            [-1, 512, 1, 1]               0\n",
      "          Conv2d-141             [-1, 32, 1, 1]          16,384\n",
      "            ReLU-142             [-1, 32, 1, 1]               0\n",
      "          Conv2d-143            [-1, 512, 1, 1]          16,384\n",
      "AdaptiveMaxPool2d-144            [-1, 512, 1, 1]               0\n",
      "          Conv2d-145             [-1, 32, 1, 1]          16,384\n",
      "            ReLU-146             [-1, 32, 1, 1]               0\n",
      "          Conv2d-147            [-1, 512, 1, 1]          16,384\n",
      "         Sigmoid-148            [-1, 512, 1, 1]               0\n",
      "ChannelAttention-149            [-1, 512, 4, 4]               0\n",
      "          Conv2d-150              [-1, 1, 4, 4]              18\n",
      "         Sigmoid-151              [-1, 1, 4, 4]               0\n",
      "SpatialAttention-152            [-1, 512, 4, 4]               0\n",
      "            CBAM-153            [-1, 512, 4, 4]               0\n",
      "          Conv2d-154            [-1, 512, 4, 4]         131,072\n",
      "     BatchNorm2d-155            [-1, 512, 4, 4]           1,024\n",
      "            ReLU-156            [-1, 512, 4, 4]               0\n",
      "      BasicBlock-157            [-1, 512, 4, 4]               0\n",
      "          Conv2d-158            [-1, 512, 4, 4]       2,359,296\n",
      "     BatchNorm2d-159            [-1, 512, 4, 4]           1,024\n",
      "            ReLU-160            [-1, 512, 4, 4]               0\n",
      "          Conv2d-161            [-1, 512, 4, 4]       2,359,296\n",
      "     BatchNorm2d-162            [-1, 512, 4, 4]           1,024\n",
      "AdaptiveAvgPool2d-163            [-1, 512, 1, 1]               0\n",
      "          Conv2d-164             [-1, 32, 1, 1]          16,384\n",
      "            ReLU-165             [-1, 32, 1, 1]               0\n",
      "          Conv2d-166            [-1, 512, 1, 1]          16,384\n",
      "AdaptiveMaxPool2d-167            [-1, 512, 1, 1]               0\n",
      "          Conv2d-168             [-1, 32, 1, 1]          16,384\n",
      "            ReLU-169             [-1, 32, 1, 1]               0\n",
      "          Conv2d-170            [-1, 512, 1, 1]          16,384\n",
      "         Sigmoid-171            [-1, 512, 1, 1]               0\n",
      "ChannelAttention-172            [-1, 512, 4, 4]               0\n",
      "          Conv2d-173              [-1, 1, 4, 4]              18\n",
      "         Sigmoid-174              [-1, 1, 4, 4]               0\n",
      "SpatialAttention-175            [-1, 512, 4, 4]               0\n",
      "            CBAM-176            [-1, 512, 4, 4]               0\n",
      "            ReLU-177            [-1, 512, 4, 4]               0\n",
      "      BasicBlock-178            [-1, 512, 4, 4]               0\n",
      "AdaptiveAvgPool2d-179            [-1, 512, 1, 1]               0\n",
      "          Linear-180                   [-1, 10]           5,130\n",
      "          ResNet-181                   [-1, 10]               0\n",
      "================================================================\n",
      "Total params: 11,348,186\n",
      "Trainable params: 11,348,186\n",
      "Non-trainable params: 0\n",
      "----------------------------------------------------------------\n",
      "Input size (MB): 0.01\n",
      "Forward/backward pass size (MB): 21.75\n",
      "Params size (MB): 43.29\n",
      "Estimated Total Size (MB): 65.05\n",
      "----------------------------------------------------------------\n"
     ]
    }
   ],
   "source": [
    "# 显示模型结构参数\n",
    "print(\"模型结构参数：\")\n",
    "summary(model, input_size=(3, 32, 32))  # 适配CIFAR10的输入"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 10. 可视化Grad-CAM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecutionIndicator": {
     "show": true
    },
    "execution": {
     "iopub.execute_input": "2025-08-23T12:45:40.554568Z",
     "iopub.status.busy": "2025-08-23T12:45:40.554404Z",
     "iopub.status.idle": "2025-08-23T12:45:41.575714Z",
     "shell.execute_reply": "2025-08-23T12:45:41.575145Z",
     "shell.execute_reply.started": "2025-08-23T12:45:40.554555Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "生成Grad-CAM可视化结果...\n"
     ]
    },
    {
     "data": {
      "image/png": "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995777Ae7e3tKhQKf9V2bL1DHkIY8vUdfbrNNddcM+TPV199tSTp2GOPlSR94hOfUCKR0OLFi4f1DSFs9+Mpt3I/RvKkk05SCEGLFy8e9r2tj7ut59fR0aGlS5cO+5mqqqphv1QBAIC/LdyBx3Z94Qtf0Je+9CWddNJJOvLII7V8+XLde++9amxsHFJ33nnnadmyZfroRz+q0047TXPmzFFPT4/+9Kc/6Re/+IXWrFkz7GferLm5WZdeeumwr0+ZMkWf/vSndfDBB+vf//3fNTAwoF122UW//vWvtXr16u32W716tY4//ngdc8wxeuSRR3TTTTfpU5/6lPbee29Jr/9ycumll+rCCy/UmjVr9PGPf1w1NTVavXq17rzzTn3xi1/U17/+9e32dz9G8tBDD9VnP/tZffe739XKlSsH3/Lz4IMP6tBDD9XZZ5+to446Sul0Wh/72Me0cOFCdXd36wc/+IFGjRo17G875syZoyVLlujSSy/VtGnTNGrUKB122GE7fG0BAMBO5j37/Bu867b3MZLb+wjHYrEYLrjggtDY2BgqKyvD0UcfHV566aVhHyMZQghdXV3hwgsvDNOmTQvpdDo0NjaG/fffP3zrW98K+Xx+h9u19aMst/Xf4YcfHkII4bXXXgsnnnhiqK+vD3V1deHkk08O69evH/ZRl1s/RvK5554Ln/zkJ0NNTU1oaGgIZ599dujr6xv22Lfffns48MADQ1VVVaiqqgozZ84MZ511Vvjzn/88WPPXfIxkCCEUCoXwzW9+M8ycOTOk0+nQ1NQUjj322PDEE08M1ixbtizstddeIZvNhsmTJ4crrrgi/PjHPx72GBs3bgzz5s0LNTU1QRIfKQkAwN+gWAhvev8AAAAAgPct3gMPAAAARAgDPAAAABAhDPAAAABAhDDAAwAAABHCAA8AAABECAM8AAAAECEM8Bhi8uTJOu200wb//MADDygWi+mBBx54z7bpzd68je+GQw45RLNnz35be74XzwMA3g6nnXbaDkPsALyzGODfR2644QbFYrHB/7LZrGbMmKGzzz5bmzZteq83ryz33HOPLr744vd0G2KxmM4+++z3dBuioLe3VxdffPH76pc0ANu2evVqnX322ZoxY4YqKytVWVmpPfbYQ2eddZaeeeaZ93rztquzs1OLFy/W3nvvrerqalVUVGj27Nm64IILtH79+m3+zPz58xWLxXTBBRds8/tbbzDFYjHddNNN26w54IADFIvFrBswp512mqqrq7f7/XfjmnLttdfqhhtueEcfAzuH5Hu9ARjuX/7lXzRlyhT19/frD3/4g5YsWaJ77rlHzz77rCorK9/VbTn44IPV19endDpd1s/dc889uuaaa97zIR5vrbe3V4sXL5b0+t80AHh/uvvuu/X3f//3SiaT+vSnP629995b8XhcL7zwgu644w4tWbJEq1ev1qRJk97rTR3i5Zdf1hFHHKFXX31VJ598sr74xS8qnU7rmWee0Y9+9CPdeeedevHFF4f8TGdnp+666y5NnjxZP/3pT/Vv//ZvisVi2+yfzWZ1yy236DOf+cyQr69Zs0YPP/ywstnsO/bc3m7XXnutGhsb+dtZvCUG+PehY489Vh/84AclSV/4whc0cuRIXXnllfrVr36lU089dZs/09PTo6qqqrd9W+LxeKQWPwDYGa1atUqnnHKKJk2apP/5n//R2LFjh3z/iiuu0LXXXqt4fMd/sf5OXSu2p1Ao6BOf+IQ2bdqkBx54QAceeOCQ71922WW64oorhv3c7bffrmKxqB//+Mc67LDD9Pvf/15z587d5mMcd9xxWrZsmVpaWtTY2Dj49VtuuUWjR4/W9OnT1dbW9vY+MeA9xltoIuCwww6T9PpfnUr//1/zrVq1Sscdd5xqamr06U9/WpJUKpV01VVXadasWcpmsxo9erQWLlw4bPEKIejSSy/V+PHjVVlZqUMPPVQrVqwY9tjbew/8H//4Rx133HFqaGhQVVWV9tprL33nO98Z3L5rrrlGkoa8JWirt3sb/xq/+tWvNG/ePI0bN06ZTEZTp07VJZdcomKxuM36J554Qvvvv78qKio0ZcoUXXfddcNqcrmcFi1apGnTpimTyWjChAk6//zzlcvl3nJ7Vq1apVWrVlnb3t7erq997WuaPHmyMpmMxo8fr8997nNqaWmRJOXzeV100UWaM2eO6urqVFVVpYMOOkj333//YI81a9aoqalJkrR48eLBfcXfnADvL//+7/+unp4eLV26dNjwLknJZFLnnnuuJkyYMPi1HV0rHnzwQZ188smaOHHi4Dr1ta99TX19fcN6//KXv9Ts2bOVzWY1e/Zs3XnnnfZ233777Vq+fLm+8Y1vDBveJam2tlaXXXbZsK/ffPPNOvLII3XooYdq9913180337zdxzjhhBOUyWR02223Dfn6Lbfcovnz5yuRSNjbWy53vV+6dKkOO+wwjRo1SplMRnvssYeWLFkypGby5MlasWKFfve73w2uxVv/VnTrW2z/8Ic/6Nxzz1VTU5Pq6+u1cOFC5fN5tbe363Of+5waGhrU0NCg888/XyGEIf2/9a1vaf/999fIkSNVUVGhOXPm6Be/+MWw57T1rUI333yzdtttN2WzWc2ZM0e///3v394XD38V7sBHwNaBbuTIkYNfKxQKOvroo3XggQfqW9/61uBbaxYuXKgbbrhBp59+us4991ytXr1a3/ve9/TUU0/poYceUiqVkiRddNFFuvTSS3XcccfpuOOO05NPPqmjjjpK+Xz+Lbfnvvvu00c/+lGNHTtWX/nKVzRmzBg9//zzuvvuu/WVr3xFCxcu1Pr163XffffpJz/5ybCffze20XXDDTeourpa//iP/6jq6mr99re/1UUXXaTOzk5985vfHFLb1tam4447TvPnz9epp56qn//85zrzzDOVTqd1xhlnSHr9l5Pjjz9ef/jDH/TFL35Ru+++u/70pz/p29/+tl588UX98pe/3OH2HH744ZJeH6x3pLu7WwcddJCef/55nXHGGfrABz6glpYWLVu2TK+99poaGxvV2dmpH/7whzr11FP1D//wD+rq6tKPfvQjHX300Xrssce0zz77qKmpSUuWLNGZZ56pE088UZ/4xCckSXvttddf9oICeEfcfffdmjZtmj70oQ+V9XPbu1bcdttt6u3t1ZlnnqmRI0fqscce09VXX63XXnttyCD861//WieddJL22GMPXX755dqyZYtOP/10jR8/3nr8ZcuWSZI++9nP2tu8fv163X///brxxhslSaeeeqq+/e1v63vf+942385ZWVmpE044QT/96U915plnSpKWL1+uFStW6Ic//GHZ/zZg602Qt1LOer9kyRLNmjVLxx9/vJLJpO666y59+ctfVqlU0llnnSVJuuqqq3TOOeeourpa3/jGNyRJo0ePHvKY55xzjsaMGaPFixfr0Ucf1fXXX6/6+no9/PDDmjhxov71X/9V99xzj775zW9q9uzZ+tznPjf4s9/5znd0/PHH69Of/rTy+bxuvfVWnXzyybr77rs1b968IY/zu9/9Tj/72c907rnnKpPJ6Nprr9Uxxxyjxx577G3/QAf8hQLeN5YuXRokhd/85jehubk5rF27Ntx6661h5MiRoaKiIrz22mshhBAWLFgQJIV/+qd/GvLzDz74YJAUbr755iFf/+///u8hX9+8eXNIp9Nh3rx5oVQqDdb98z//c5AUFixYMPi1+++/P0gK999/fwghhEKhEKZMmRImTZoU2trahjzOG3udddZZYVuH1zuxjdsjKZx11lk7rOnt7R32tYULF4bKysrQ398/+LW5c+cGSeE//uM/Br+Wy+XCPvvsE0aNGhXy+XwIIYSf/OQnIR6PhwcffHBIz+uuuy5ICg899NDg1yZNmjTseUyaNClMmjTpLZ/bRRddFCSFO+64Y9j3tr5ehUIh5HK5Id9ra2sLo0ePDmecccbg15qbm4OksGjRord8XADvvo6OjiApfPzjHx/2vba2ttDc3Dz43xvXtO1dK0LY9tp3+eWXh1gsFl555ZXBr+2zzz5h7Nixob29ffBrv/71r4Mka63ad999Q11d3VvWvdG3vvWtUFFRETo7O0MIIbz44otBUrjzzjuH1G29Pt12223h7rvvDrFYLLz66qshhBDOO++8sOuuu4YQXl+/Z82a9ZaPu/X12tF/b7ymlLPeb+v1Pvroowe3catZs2aFuXPnDqvdOh8cffTRQ66JH/nIR0IsFgtf+tKXBr9WKBTC+PHjh/V58zbk8/kwe/bscNhhhw35+tbn+vjjjw9+7ZVXXgnZbDaceOKJw7YN7w3eQvM+dMQRR6ipqUkTJkzQKaecourqat15553aZZddhtRtvdOw1W233aa6ujodeeSRamlpGfxvzpw5qq6uHnzrxG9+8xvl83mdc845Q97a8tWvfvUtt+2pp57S6tWr9dWvflX19fVDvre9f2D0bm9jOSoqKgb/v6urSy0tLTrooIPU29urF154YUhtMpnUwoULB/+cTqe1cOFCbd68WU888cTg89t99901c+bMIc9v69ug3vj2lW1Zs2bNW959l17/a+m9995bJ5544rDvbX29EonE4N2qUqmk1tZWFQoFffCDH9STTz75lo8B4P2hs7NTkrb5CSmHHHKImpqaBv/b+vbFN3rztUIauvb19PSopaVF+++/v0IIeuqppyRJGzZs0NNPP60FCxaorq5usP7II4/UHnvsYW97TU2NVbvVzTffrHnz5g3+3PTp0zVnzpwdvo3mqKOO0ogRI3TrrbcqhKBbb711u/9mbEey2azuu+++bf73ZuWs9298vTs6OtTS0qK5c+fq5ZdfVkdHh719n//854dcEz/0oQ8phKDPf/7zg19LJBL64Ac/qJdffnnIz75xG9ra2tTR0aGDDjpom9eDj3zkI5ozZ87gnydOnKgTTjhB995773bfYop3F2+heR+65pprNGPGDCWTSY0ePVq77bbbsH+YlEwmh/0V5sqVK9XR0aFRo0Zts+/mzZslSa+88oqk1xfFN2pqalJDQ8MOt23r23n+0r9Ceze2sRwrVqzQ//k//0e//e1vBy+SW715UR03btywf/w1Y8YMSa8P3h/+8Ie1cuVKPf/884PvK3+zrc/vr7Vq1SqddNJJb1l344036j/+4z/0wgsvaGBgYPDrU6ZMeVu2A8A7b+sg293dPex73//+99XV1aVNmzYN+xQWadvXCkl69dVXddFFF2nZsmXD/v3R1rVve+uwJO22225DBr/m5uYhg111dbWqq6tVW1s7bJDckeeff15PPfWUPve5z+mll14a/Pohhxyia665Rp2dnaqtrR32c6lUSieffLJuueUW7bffflq7dq0+9alP2Y+7VSKR0BFHHGHVlrPeP/TQQ1q0aJEeeeQR9fb2Dqnr6OgY8gvSjkycOHHIn7f+3Bv/7cPWr795v95999269NJL9fTTTw95j/62br5ta5/PmDFDvb29am5u1pgxY6ztxTuHAf59aL/99hv8FJrtyWQyw4b6UqmkUaNGbfcuxfYWmXfT+2kb29vbNXfuXNXW1upf/uVfNHXqVGWzWT355JO64IILVCqVyu5ZKpW055576sorr9zm99+8yL6TbrrpJp122mn6+Mc/rvPOO0+jRo1SIpHQ5Zdfbv9DWQDvvbq6Oo0dO1bPPvvssO9tfU/89v7mblvXimKxqCOPPFKtra264IILNHPmTFVVVWndunU67bTT/qK17+/+7u8GB35JWrRokS6++GLNnDlTTz31lNauXWutf1s/z/1rX/uavva1rw37/u23367TTz99mz/7qU99Stddd50uvvhi7b333vbfEvyl3PV+1apVOvzwwzVz5kxdeeWVmjBhgtLptO655x59+9vfLuv13t4/yN3W18Mb/hHrgw8+qOOPP14HH3ywrr32Wo0dO1apVEpLly7VLbfcYj8+3j8Y4HciU6dO1W9+8xsdcMABQ/6q7M22fkbwypUrteuuuw5+vbm5+S0/amvq1KmSpGeffXaHdym293aad2MbXQ888IC2bNmiO+64QwcffPDg17d+2s+brV+/fthHsG397OKtiYRTp07V8uXLdfjhh1tvKfpLTZ06dZsX8zf6xS9+oV133VV33HHHkG1ZtGjRkLp3cjsBvD3mzZunH/7wh3rssce03377/VW9/vSnP+nFF1/UjTfeOOQfOb75bSJvXIff7M9//vOQP998881DPsFm67r9sY99TD/96U9100036cILL9zhdoUQdMstt+jQQw/Vl7/85WHfv+SSS3TzzTdvd4A/8MADNXHiRD3wwAPb/GjKt5u73t91113K5XJatmzZkDvo23pL5Tu1Ht9+++3KZrO69957lclkBr++dOnSbdZva5+/+OKLqqysfF/cDAQfI7lTmT9/vorFoi655JJh3ysUCmpvb5f0+nvsU6mUrr766iG/oV911VVv+Rgf+MAHNGXKFF111VWD/bZ6Y6+tQ+6ba96NbXRtvWPxxv75fF7XXnvtNusLhYK+//3vD6n9/ve/r6ampsH3Cs6fP1/r1q3TD37wg2E/39fXp56enh1uk/sxkieddJKWL1++zY9z2/p8tvX8/vjHP+qRRx4ZUr/1UynevK8AvH+cf/75qqys1BlnnLHNZO7wpo8M3JFtrQ0hhMGPAt5q7Nix2meffXTjjTcOeUvhfffdp+eee25I7QEHHKAjjjhi8L+tA/wnP/lJ7bnnnrrsssuGrT3S6//2aOsnrjz00ENas2aNTj/9dH3yk58c9t/f//3f6/77799ucmssFtN3v/tdLVq0qKxPvflLuev9tl7vjo6ObQ7PVVVV78hanEgkFIvFhrzNac2aNdv9ZLRHHnlkyFuk1q5dq1/96lc66qij3tGP5YSPO/A7kblz52rhwoW6/PLL9fTTT+uoo45SKpXSypUrddttt+k73/mOPvnJT6qpqUlf//rXdfnll+ujH/2ojjvuOD311FP6r//6ryEhGNsSj8e1ZMkSfexjH9M+++yj008/XWPHjtULL7ygFStW6N5775WkwYH23HPP1dFHH61EIqFTTjnlXdnGN3r88cd16aWXDvv6IYccov33318NDQ1asGCBzj33XMViMf3kJz/Z7oVw3LhxuuKKK7RmzRrNmDFDP/vZz/T000/r+uuv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",
      "text/plain": [
       "<Figure size 800x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAvAAAAGTCAYAAABOLiYTAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAASZhJREFUeJzt3XmUXHWd/vHn1t7VezqdlYSELGxhM4oLECK7RIKjGFkUiIMGWdVREP0JicJkGB1AkYCowyJEEIEBGTAEBRWEcZAAEkECJGELSTpJ70t1Vd3fH5z00Oksz4WEeMP7dQ7n0JVPf+/+vZ++XV1PEIZhKAAAAACxkNjeKwAAAADARwMPAAAAxAgNPAAAABAjNPAAAABAjNDAAwAAADFCAw8AAADECA08AAAAECM08AAAAECM0MADAAAAMUIDj1ibPXu2giBQU1PTVhvz1FNP1ZgxY7baeBu6/vrrFQSBHn/88S3WTp06VVOnTt1m6wIAAOKHBn4HEgSB9d9DDz20Xddz6tSpmjRp0nZdBwAAgLhKbe8VwNbz85//vN/XN954oxYuXDjg9d133/3dXC28A/fff//2XgUAAPAPhgZ+B/LZz36239ePPfaYFi5cOOD1DXV2diqfz2/LVcPblMlktvcqAACAfzC8heY9Zv3bV/7yl79oypQpyufz+uY3vynpzbfgzJ49e8D3jBkzRqeeemq/15qbm/XlL39Zo0aNUjab1fjx43XppZeqXC5vlfV8+umndeqpp2qXXXZRLpfTsGHD9PnPf15r1qzZaH1TU5NmzJihmpoaNTQ06Nxzz1V3d/eAuptuukmTJ09WRUWFBg0apOOPP16vvPLKFtdnxYoVeu6559Tb27vF2ltuuUWTJ09WdXW1ampqtNdee+kHP/jBgLqenh599atfVWNjoyorK/VP//RPWr16db+aDd8D/9BDDykIAt1666365je/qWHDhqmyslLTp0+3tgMAAMQfT+Dfg9asWaOPfexjOv744/XZz35WQ4cOjfT9nZ2dOvjgg/Xaa69p1qxZGj16tP70pz/pggsu0IoVK3TFFVe843VcuHChXnrpJc2cOVPDhg3T4sWLde2112rx4sV67LHHFARBv/oZM2ZozJgxmjt3rh577DH98Ic/1Lp163TjjTf21VxyySX69re/rRkzZui0007T6tWrdeWVV2rKlClatGiR6urqNrk+F1xwgW644QYtXbp0s3/gunDhQp1wwgk69NBDdemll0qSnn32WT3yyCM699xz+9WeffbZqq+v10UXXaRly5bpiiuu0FlnnaVbb711i/vnkksuURAEOv/887Vq1SpdccUVOuyww/Tkk0+qoqJii98PAADiiwb+PeiNN97QNddco1mzZr2t77/sssv04osvatGiRZowYYIkadasWRoxYoS+973v6V/+5V80atSod7SOZ5xxhv7lX/6l32sf+tCHdMIJJ+jhhx/WQQcd1O/fxo4dq7vuukuSdOaZZ6qmpkbz5s3T1772Ne29995avny5LrroIl188cV9v3GQpE9+8pPab7/9NG/evH6vv13//d//rZqaGi1YsEDJZHKztQ0NDbr//vv7fhgpl8v64Q9/qJaWFtXW1m72e9euXatnn31W1dXVkqT3ve99mjFjhn7yk5/onHPOecfbAQAA/nHxFpr3oGw2q5kzZ77t77/tttt00EEHqb6+Xk1NTX3/HXbYYSqVSvrDH/7wjtfxrU+Ru7u71dTUpA996EOSpCeeeGJA/Zlnntnv67PPPluSdO+990qS7rjjDpXLZc2YMaPfOg8bNkwTJkzQgw8+uNn1uf766xWG4RY/XrKurk4dHR1auHDhFrfxi1/8Yr/fJBx00EEqlUpavnz5Fr/35JNP7mveJem4447T8OHD+7YXAADsuHgC/x40cuTId/THkUuWLNHTTz+txsbGjf77qlWr3vbY661du1Zz5szRLbfcMmC8lpaWAfXrfxOw3rhx45RIJLRs2bK+dQ7DcEDdeul0+h2vs/Tmbw5++ctf6mMf+5hGjhypI444QjNmzNBRRx01oHb06NH9vq6vr5ckrVu3bovL2XA7giDQ+PHj+7YXAADsuGjg34Oivke6VCr1+7pcLuvwww/Xeeedt9H6iRMnvu11W2/GjBn605/+pK9//evad999VVVVpXK5rKOOOsr6Q9kN3yNfLpcVBIHuu+++jb61paqq6h2vsyQNGTJETz75pBYsWKD77rtP9913n6677jqdfPLJuuGGG/rVbuotNmEYbpV1AQAAOyYaePSpr69Xc3Nzv9cKhYJWrFjR77Vx48apvb1dhx122DZZj3Xr1um3v/2t5syZowsvvLDv9SVLlmzye5YsWaKxY8f2ff3CCy+oXC73veVl3LhxCsNQY8eO3So/YGxOJpPRMccco2OOOUblcllnnHGGfvzjH+vb3/62xo8fv1WWseG+CMNQL7zwgvbee++tMj4AAPjHxXvg0WfcuHED3r9+7bXXDngCP2PGDD366KNasGDBgDGam5tVLBbf0XqsfzK94ZPozX26zVVXXdXv6yuvvFKS9LGPfUzSm3+smkwmNWfOnAHjhmG4yY+nXM/9GMkNx0kkEn1NdU9Pz2a/N4obb7xRbW1tfV//6le/0ooVK/q2FwAA7Lh4Ao8+p512mk4//XR96lOf0uGHH66nnnpKCxYs0ODBg/vVff3rX9fdd9+tj3/84zr11FM1efJkdXR06K9//at+9atfadmyZQO+Z0OrV6/WxRdfPOD1sWPH6qSTTtKUKVP07//+7+rt7dXIkSN1//33a+nSpZscb+nSpZo+fbqOOuooPfroo7rpppt04oknap999pH05g8nF198sS644AItW7ZMn/jEJ1RdXa2lS5fqzjvv1Be/+EV97Wtf2+T47sdInnbaaVq7dq0OOeQQ7bTTTlq+fLmuvPJK7bvvvls1AXfQoEE68MADNXPmTK1cuVJXXHGFxo8fry984QtbbRkAAOAfEw08+nzhC1/Q0qVL9bOf/Uy/+c1vdNBBB2nhwoU69NBD+9Xl83n9/ve/17/+67/qtttu04033qiamhpNnDhRc+bM2eJHIEpv/qHrt7/97QGvH3rooTrppJM0f/58nX322brqqqsUhqGOOOII3XfffRoxYsRGx7v11lt14YUX6hvf+IZSqZTOOussfe973+tX841vfEMTJ07U5Zdfrjlz5kiSRo0apSOOOELTp093d9Nmffazn9W1116refPmqbm5WcOGDdNnPvMZzZ49W4nE1vuF1ze/+U09/fTTmjt3rtra2nTooYdq3rx5JOoCAPAeEIT8xRwQGw899JA++tGP6rbbbtNxxx23vVcHAABsB7wHHgAAAIgRGngAAAAgRmjgAQAAgBjhPfAAAABAjPAEHgAAAIgRGngAAAAgRmjg38PGjBmjU089te/rhx56SEEQ6KGHHtpu67ShDdfx3TB16lRNmjRpq465rbfj1FNPVVVVlVUbBIFmz569zdYFwI7v1FNP3WyoHYBtiwZ+O7n++usVBEHff7lcThMnTtRZZ52llStXbu/Vi+Tee+/d7g1hEAQ666yztus6AMC2tnTpUp111lmaOHGi8vm88vm89thjD5155pl6+umnt/fqbVJra6vmzJmjffbZR1VVVaqoqNCkSZN0/vnn6/XXX9/o98yYMUNBEOj888/f6L+vf+gUBIFuuummjdYccMABCoLAeiizpQch78Z9Zt68ebr++uu36TKwYyCJdTv7zne+o7Fjx6q7u1sPP/ywrr76at1777165pln3vVUzSlTpqirq0uZTCbS991777266qqrtnsTD09XV5dSKS59IG7uuecefeYzn1EqldJJJ52kffbZR4lEQs8995zuuOMOXX311Vq6dKl23nnn7b2q/bz00ks67LDD9PLLL+vTn/60vvjFLyqTyejpp5/Wz372M9155516/vnn+31Pa2urfv3rX2vMmDH6xS9+oX/7t39TEAQbHT+Xy2n+/Pn67Gc/2+/1ZcuW6U9/+pNyudw227atbd68eRo8ePC7/ptnxA938e3sYx/7mN7//vdLkk477TQ1NDTosssu01133aUTTjhho9/T0dGhysrKrb4uiUQiVhMd3h6OMRA/L774oo4//njtvPPO+u1vf6vhw4f3+/dLL71U8+bNUyKx+V+sb6v7x6YUi0V98pOf1MqVK/XQQw/pwAMP7Pfvl1xyiS699NIB33f77berVCrpP//zP3XIIYfoD3/4gw4++OCNLuPoo4/W3XffraamJg0ePLjv9fnz52vo0KGaMGGC1q1bt3U3DNjOeAvNP5hDDjlE0pu/JpX+71d6L774oo4++mhVV1frpJNOkiSVy2VdccUV2nPPPZXL5TR06FDNmjVrwEQVhqEuvvhi7bTTTsrn8/roRz+qxYsXD1j2pt4D/z//8z86+uijVV9fr8rKSu299976wQ9+0Ld+V111lST1e0vQelt7Hd+Ju+66S9OmTdOIESOUzWY1btw4ffe731WpVNpo/V/+8hd95CMfUUVFhcaOHatrrrlmQE1PT48uuugijR8/XtlsVqNGjdJ5552nnp6eLa7Piy++qBdffHGLdb29vZozZ44mTJigXC6nhoYGHXjggVq4cOGA2tdee02f+MQnVFVVpcbGRn3ta18bsH0bvgd+9uzZCoJAzz33nGbMmKGamho1NDTo3HPPVXd39xbXD8C29+///u/q6OjQddddN6B5l6RUKqVzzjlHo0aN6nttc/ePP/7xj/r0pz+t0aNH981dX/nKV9TV1TVg7P/6r//SpEmTlMvlNGnSJN155532et9+++166qmn9K1vfWtA8y5JNTU1uuSSSwa8fvPNN+vwww/XRz/6Ue2+++66+eabN7mMY489VtlsVrfddlu/1+fPn68ZM2YomUza6xuVew+47rrrdMghh2jIkCHKZrPaY489dPXVV/erGTNmjBYvXqzf//73fffSqVOnSvq/t90+/PDDOuecc9TY2Ki6ujrNmjVLhUJBzc3NOvnkk1VfX6/6+nqdd9552vBTwr///e/rIx/5iBoaGlRRUaHJkyfrV7/61YBtWv9WoZtvvlm77rqrcrmcJk+erD/84Q9bd+fhHeEJ/D+Y9Q1dQ0ND32vFYlFHHnmkDjzwQH3/+9/ve2vNrFmzdP3112vmzJk655xztHTpUv3oRz/SokWL9MgjjyidTkuSLrzwQl188cU6+uijdfTRR+uJJ57QEUccoUKhsMX1WbhwoT7+8Y9r+PDhOvfcczVs2DA9++yzuueee3Tuuedq1qxZev3117Vw4UL9/Oc/H/D978Y6uq6//npVVVXpq1/9qqqqqvS73/1OF154oVpbW/W9732vX+26det09NFHa8aMGTrhhBP0y1/+Ul/60peUyWT0+c9/XtKbP5xMnz5dDz/8sL74xS9q991311//+lddfvnlev755/Vf//Vfm12fQw89VNKbv+bdnNmzZ2vu3Lk67bTTtP/++6u1tVWPP/64nnjiCR1++OF9daVSSUceeaQ++MEP6vvf/74eeOAB/cd//IfGjRunL33pS1vcPzNmzNCYMWM0d+5cPfbYY/rhD3+odevW6cYbb9zi9wLYtu655x6NHz9eH/zgByN936buH7fddps6Ozv1pS99SQ0NDfrzn/+sK6+8Uq+++mq/Rvj+++/Xpz71Ke2xxx6aO3eu1qxZo5kzZ2qnnXayln/33XdLkj73uc/Z6/z666/rwQcf1A033CBJOuGEE3T55ZfrRz/60Ubf4pnP53XsscfqF7/4Rd9c99RTT2nx4sX66U9/GvlvA5qamqy6KPeAq6++WnvuuaemT5+uVCqlX//61zrjjDNULpd15plnSpKuuOIKnX322aqqqtK3vvUtSdLQoUP7LfPss8/WsGHDNGfOHD322GO69tprVVdXpz/96U8aPXq0/vVf/1X33nuvvve972nSpEk6+eST+773Bz/4gaZPn66TTjpJhUJBt9xyiz796U/rnnvu0bRp0/ot5/e//71uvfVWnXPOOcpms5o3b56OOuoo/fnPf97qH/KAtynEdnHdddeFksIHHnggXL16dfjKK6+Et9xyS9jQ0BBWVFSEr776ahiGYXjKKaeEksJvfOMb/b7/j3/8YygpvPnmm/u9/pvf/Kbf66tWrQozmUw4bdq0sFwu99V985vfDCWFp5xySt9rDz74YCgpfPDBB8MwDMNisRiOHTs23HnnncN169b1W85bxzrzzDPDjZ1K22IdN0VSeOaZZ262prOzc8Brs2bNCvP5fNjd3d332sEHHxxKCv/jP/6j77Wenp5w3333DYcMGRIWCoUwDMPw5z//eZhIJMI//vGP/ca85pprQknhI4880vfazjvvPGA7dt5553DnnXfe4rbts88+4bRp0zZbs/48+c53vtPv9f322y+cPHlyv9ckhRdddFHf1xdddFEoKZw+fXq/ujPOOCOUFD711FNbXEcA205LS0soKfzEJz4x4N/WrVsXrl69uu+/t85zm7p/hOHG58O5c+eGQRCEy5cv73tt3333DYcPHx42Nzf3vXb//feHkqz5a7/99gtra2u3WPdW3//+98OKioqwtbU1DMMwfP7550NJ4Z133tmvbv0967bbbgvvueeeMAiC8OWXXw7DMAy//vWvh7vssksYhm/O6XvuuecWl7t+f23uv7feZ6LcAza2v4888si+dVxvzz33DA8++OABtet7hiOPPLLfffLDH/5wGARBePrpp/e9ViwWw5122mnAOBuuQ6FQCCdNmhQecsgh/V5fv62PP/5432vLly8Pc7lc+E//9E8D1g3bB2+h2c4OO+wwNTY2atSoUTr++ONVVVWlO++8UyNHjuxXt+ET1Ntuu021tbU6/PDD1dTU1Pff5MmTVVVVpQcffFCS9MADD6hQKOjss8/u99aWL3/5y1tct0WLFmnp0qX68pe/rLq6un7/tqk/Jnq31zGKioqKvv9va2tTU1OTDjroIHV2duq5557rV5tKpTRr1qy+rzOZjGbNmqVVq1bpL3/5S9/27b777tptt936bd/6t0Gt375NWbZs2RafvktSXV2dFi9erCVLlmyx9vTTT+/39UEHHaSXXnppi98nqe8p0Hpnn322pDf/SBnA9tPa2ipJG/2ElKlTp6qxsbHvv/VvaXyrjf0G7q3zYUdHh5qamvSRj3xEYRhq0aJFkqQVK1boySef1CmnnKLa2tq++sMPP1x77LGHve7V1dVW7Xo333yzpk2b1vd9EyZM0OTJkzf7NpojjjhCgwYN0i233KIwDHXLLbds8u/INieXy2nhwoUb/W9DUe4Bb93fLS0tampq0sEHH6yXXnpJLS0t9vr98z//c7/75Ac/+EGFYah//ud/7nstmUzq/e9//4C5/63rsG7dOrW0tOiggw7SE088MWA5H/7whzV58uS+r0ePHq1jjz1WCxYs2OTbTvHu4i0029lVV12liRMnKpVKaejQodp1110H/BFSKpUa8OvKJUuWqKWlRUOGDNnouKtWrZIkLV++XNKbE+BbNTY2qr6+frPrtv7tPG/312XvxjpGsXjxYv2///f/9Lvf/a7vhrjehhPoiBEjBvyh18SJEyW92Xh/6EMf0pIlS/Tss8+qsbFxo8tbv33v1He+8x0de+yxmjhxoiZNmqSjjjpKn/vc57T33nv3q8vlcgPWpb6+3v7jrQ33/7hx45RIJKwfMgBsO+sb2fb29gH/9uMf/1htbW1auXLlgE9hkTZ+/5Ckl19+WRdeeKHuvvvuAXPE+vlwU3OzJO266679Gr/Vq1f3a+yqqqpUVVWlmpoa+yGCJD377LNatGiRTj75ZL3wwgt9r0+dOlVXXXWVWltbVVNTM+D70um0Pv3pT2v+/Pnaf//99corr+jEE0+0l7teMpnUYYcdZtVGuQc88sgjuuiii/Too4+qs7OzX11LS0u/H5A2Z/To0f2+Xv99b/3bh/Wvb3hc77nnHl188cV68skn+71Hf2MP5DZ2zCdOnKjOzk6tXr1aw4YNs9YX2w4N/Ha2//77930KzaZks9kBTX25XNaQIUM2+URiUxPKu+kfaR2bm5t18MEHq6amRt/5znc0btw45XI5PfHEEzr//PNVLpcjj1kul7XXXnvpsssu2+i/bzihvl1TpkzRiy++qLvuukv333+/fvrTn+ryyy/XNddco9NOO62vbmv/oZbzWxYA215tba2GDx+uZ555ZsC/rX9P/KZ+0N7Y/aNUKunwww/X2rVrdf7552u33XZTZWWlXnvtNZ166qlvaz78wAc+0NfwS9JFF12k2bNna7fddtOiRYv0yiuvWHPi+s9z/8pXvqKvfOUrA/799ttv18yZMzf6vSeeeKKuueYazZ49W/vss4/9W4K3y70HvPjiizr00EO122676bLLLtOoUaOUyWR077336vLLL4+0vzc1z2/s9fAtf8T6xz/+UdOnT9eUKVM0b948DR8+XOl0Wtddd53mz59vLx//OGjgY2rcuHF64IEHdMABB/T7tdiG1n8e8JIlS7TLLrv0vb569eotPpkdN26cJOmZZ57Z7BOJTTV678Y6uh566CGtWbNGd9xxh6ZMmdL3+vpP+9nQ66+/PuDj1tZ/TvH69MFx48bpqaee0qGHHrrNm91BgwZp5syZmjlzptrb2zVlyhTNnj27XwP/Ti1ZskRjx47t+/qFF15QuVwmbRH4BzBt2jT99Kc/1Z///Gftv//+72isv/71r3r++ed1ww039Psjxw3fJvLWuXlDf//73/t9ffPNN/f7BJv1c/kxxxyjX/ziF7rpppt0wQUXbHa9wjDU/Pnz9dGPflRnnHHGgH//7ne/q5tvvnmTDfyBBx6o0aNH66GHHtroR1Nube494Ne//rV6enp0991393uCvrG3WW6re8ntt9+uXC6nBQsWKJvN9r1+3XXXbbR+Y8f8+eefVz6f/4d4QAg+RjK2ZsyYoVKppO9+97sD/q1YLKq5uVnSm++xT6fTuvLKK/v9NH7FFVdscRnve9/7NHbsWF1xxRV946331rHWN7kb1rwb6+ha/3TireMXCgXNmzdvo/XFYlE//vGP+9X++Mc/VmNjY9/7AmfMmKHXXntNP/nJTwZ8f1dXlzo6Oja7Tu7HSK5Zs6bf11VVVRo/frz1UZVRbPje2SuvvFLSm1kFALav8847T/l8Xp///Oc3mtYdbvCRgZuzsfkwDMO+jwdeb/jw4dp33311ww039Hub4cKFC/W3v/2tX+0BBxygww47rO+/9Q38cccdp7322kuXXHKJHn300QHr0tbW1veJK4888oiWLVummTNn6rjjjhvw32c+8xk9+OCDm0xuDYJAP/zhD3XRRRdF+tSbt8u9B2xsf7e0tGy0ea6srBxwL90aksmkgiDo9zanZcuWbfLT0h599NF+b5F65ZVXdNddd+mII47Yph/LCR9P4GPq4IMP1qxZszR37lw9+eSTOuKII5ROp7VkyRLddttt+sEPfqDjjjuu77PA586dq49//OM6+uijtWjRIt133339Ai82JpFI6Oqrr9YxxxyjfffdVzNnztTw4cP13HPPafHixVqwYIEk9TW055xzjo488kglk0kdf/zx78o6vtXjjz+uiy++eMDrU6dO1Uc+8hHV19frlFNO0TnnnKMgCPTzn/98kze9ESNG6NJLL9WyZcs0ceJE3XrrrXryySd17bXX9n305ec+9zn98pe/1Omnn64HH3xQBxxwgEqlkp577jn98pe/1IIFCzb79ij3YyT32GMPTZ06VZMnT9agQYP0+OOP61e/+tVWj/ReunSppk+frqOOOkqPPvqobrrpJp144onaZ599tupyAEQ3YcIEzZ8/XyeccIJ23XXXviTWMAy1dOlSzZ8/X4lEwvp4x912203jxo3T1772Nb322muqqanR7bffvtHfeM6dO1fTpk3TgQceqM9//vNau3atrrzySu25554bfU/+htLptO644w4ddthhmjJlimbMmKEDDjhA6XRaixcv1vz581VfX69LLrlEN998s5LJ5ICPNFxv+vTp+ta3vqVbbrlFX/3qVzdac+yxx+rYY4/d4nptDe494IgjjlAmk9ExxxyjWbNmqb29XT/5yU80ZMgQrVixot+YkydP1tVXX62LL75Y48eP15AhQ/r+KPadmDZtmi677DIdddRROvHEE7Vq1SpdddVVGj9+/EY/ZnPSpEk68sgj+32MpCTNmTPnHa8LtpLt8Mk3CP/vI6H+93//d7N1p5xySlhZWbnJf7/22mvDyZMnhxUVFWF1dXW41157heedd174+uuv99WUSqVwzpw54fDhw8OKiopw6tSp4TPPPDPgow03/BjJ9R5++OHw8MMPD6urq8PKyspw7733Dq+88sq+fy8Wi+HZZ58dNjY2hkEQDPhIya25jpuizXzs13e/+90wDMPwkUceCT/0oQ+FFRUV4YgRI8LzzjsvXLBgwYBtXv+RY48//nj44Q9/OMzlcuHOO+8c/uhHPxqw3EKhEF566aXhnnvuGWaz2bC+vj6cPHlyOGfOnLClpaWv7p18jOTFF18c7r///mFdXV1YUVER7rbbbuEll1zS93GWYbjp82T9R0RuuK829jGSf/vb38LjjjsurK6uDuvr68Ozzjor7Orq2uL6AXj3vPDCC+GXvvSlcPz48WEul+ubE04//fTwySef7Fe7ufvH3/72t/Cwww4Lq6qqwsGDB4df+MIXwqeeeiqUFF533XX9am+//fZw9913D7PZbLjHHnuEd9xxR3jKKadY89d669atCy+88MJwr732CvP5fJjL5cJJkyaFF1xwQbhixYqwUCiEDQ0N4UEHHbTZccaOHRvut99+YRj2/xjJzYnyMZKbu99qIx9X7N4D7r777nDvvfcOc7lcOGbMmPDSSy8N//M//zOUFC5durSv7o033ginTZsWVldXh5L6PgpyUz3D+vl79erVW9yWn/3sZ+GECRPCbDYb7rbbbuF11123yXvEmWeeGd5000199fvtt9+A3gDbVxCGEX7vBmCHM3v2bM2ZM0erV6+O9BsPAMCOJwgCnXnmmfrRj360vVcFm8F74AEAAIAYoYEHAAAAYoQGHgAAAIgR3gMPAAAAxAhP4AEAAIAYoYEHAAAAYoQGHgAAAIgRO4m1qanJHrRYLFp1QRDYY8K0I+7TKH+lsQ3+oiOM8GNuaK5AItqgvqC8deveLI5Qa27X9v7Tm21xnUTYpqFDh2795W9n51/aYdeWy+75tw2OUz5C7aBtUBslaiHC8lP1XVZdba7VHrNGXm2l/GOfU7ddm1XPVh8zExa2+vKzQYTly12+f49oC6vt2vbAuwA6IlwobaqxaztUZdZVRhjTq+3pzthjboupJ8q9fO7gxi3W8AQeAAAAiBEaeAAAACBGaOABAACAGKGBBwAAAGKEBh4AAACIERp4AAAAIEZo4AEAAIAYoYEHAAAAYoQGHgAAAIgRGngAAAAgRlJuYTKZ3Jbrga0k2BYR8TESlEt2rZ1qnPD3adnNXw4jXE+hv/wg4W1VIDfKXoqU/2w+EwjDKGNufdviOtne27S9BYH/PCixPR8dRVl2lNPErd0WY0pKmPNUIsLOT5gr4NZFr/XW1a2TpGSEy9QdNRlhPnG3Pwz9bYp07Zm1Cfn3qG1x/BNR7nvueRLhXh7tQnWH3Lr3CJ7AAwAAADFCAw8AAADECA08AAAAECM08AAAAECM0MADAAAAMUIDDwAAAMQIDTwAAAAQIzTwAAAAQIzQwAMAAAAxYiexRkkZfK8nEm5Pcdr3dhpmlG0KIySM2ouPkkLs/Uzc01u0R0yl0/7iS972J7dyItz/iZLwumOJ07W3bUS5R2zD1djiwrfjsrchd59GupebO8ut21a1kcaMcvKZ82S089m78RTL/lxajvAotlw2tynCPSLK5vvHNIqtf5yCbXCP3NrzHk/gAQAAgBihgQcAAABihAYeAAAAiBEaeAAAACBGaOABAACAGKGBBwAAAGKEBh4AAACIERp4AAAAIEZo4AEAAIAYoYEHAAAAYiTlFtqx9xFr38uIXjdFOJ2KUfZpeetHWvcWS1bdkpdessccOmyIXVsuFKy6xkH19pi5bNpf/nv4nGbei3KP2I7nSYwO03v3atp2yhH2atksLUWY93rL3j2iaV2zPWa5yp+j20ve/SysqLDHDJIxuqi2o619i+AJPAAAABAjNPAAAABAjNDAAwAAADFCAw8AAADECA08AAAAECM08AAAAECM0MADAAAAMUIDDwAAAMQIDTwAAAAQI3YSa5TUULeW5MKtb1vs0+2fGOtvUyqdsWuLoTduV3uPPWZzS4dVt7JprT1mRXWlXdtQXW3VJQL/Z/cgws/5QeCn1m51UdKit+FqvGflItwjzNNkm9wishFqcxFq81u5TpLyXmqnJOVzXebivTpJqlKnVVcpb96TpJy67dqsvGTpjPw5uiLp16ZCb/mJgr/95Z52qy7sXGOPmc74J3V1drBV1xthnypCbUlJq64o/15eMC/qMOstOy54Ag8AAADECA08AAAAECM08AAAAECM0MADAAAAMUIDDwAAAMQIDTwAAAAQIzTwAAAAQIzQwAMAAAAxQgMPAAAAxAgNPAAAABAjKbcwkfAzrcPyjhdUHrqb5KeJRxKYmeKJbZA9XooQPF8umxnpkpJJ7+fHQqHXHnP1mla7trXDi/Tu6vHjzDs6vUjpRNbPU+/o8uK8Jakq752AxQjnqR9oLW2D02+bcK8n+IIaf58G5W00UTr8S08aFKG2wawbXLSHrKtutmvrtc6qGxT4Y9bJq60M2+wxM6E3R0pSRcKb+1KlLnvMUleLXRsWOrzl9/jLV7t3PxsS+ve93uIquzZMm2PaI0qZCI1PMogysic0e5RCpGX/498jeAIPAAAAxAgNPAAAABAjNPAAAABAjNDAAwAAADFCAw8AAADECA08AAAAECM08AAAAECM0MADAAAAMUIDDwAAAMQIDTwAAAAQIym3sKMzQlSwGZOdSibtIUNzzGTKHzNKbRB4yw8jpO8mylv/56dElPhfM06+vafbHjIM/UjlXMo7/bp7/ejxFWta7dpV67zacoR92lv0tr+zrd0ec1XTWrv21ddWWHV7TNjFHnOXMTvZtamwZNVFOU8UmtdJlOTrKJeJuaqRrr0dUKEiQky5u08TEfapOWZQ44+ZqI8wRw/yVqC2piXCkOvs2np5tQ3y5xO3NlPy1zOjHru2KuHNJ0HBn09bV7bZtR0t3roWO/1zqtzlnSe9YcEeM6x9za7tbfCOVabBv+/X1vnXScK8R5QizKdls/HqDvxeIjD7I0n+3OOPaOEJPAAAABAjNPAAAABAjNDAAwAAADFCAw8AAADECA08AAAAECM08AAAAECM0MADAAAAMUIDDwAAAMQIDTwAAAAQI3YSa3NXhPS0fKVVl0il7TFLZS9BK1K4aYRYrKRZm4gQxRoktsHPTxESLt2ksTdW+ClvgwYNsmtzuYxV19PdaY+Zz3pjStKwxsFWXRjhROno9NLrKjP+eha6/RTkZKJs1bX3+NdzKUIiXSLwppRylCRWc/9HCe2MlIhnFkfapB1Qd95LWJSkTNqb+4NEhLTu0Dv3g2p7SMmfzlQzqNmqqw+9OkkaFPi1g7XGqmsw6yRpcOAlsfY0L7fHrFHOrs0qa9V1rfVTS9Mt/jlV1Zn3Crv9GaXQ6vUy6cBfT7c/kqR8yrtOk7Wr7TFTqrVr3dtJr/z+sBh499OkG5mqbXOPIIkVAAAAeA+jgQcAAABihAYeAAAAiBEaeAAAACBGaOABAACAGKGBBwAAAGKEBh4AAACIERp4AAAAIEZo4AEAAIAYoYEHAAAAYsTLPZeUqmmwBy0lvJ8LeiPEZCswY7rdOkmlsl+bMHPSgwh56mGEWF97zAhZvW70fLHQY48ZhP4+lRn/XFddaQ/Z2xthnya9qOZ8lZ+93tHZbdUFSS8i/M1a/6BmK9yIen/MYuD/nG+m2UfKlHZXtRzhevJDuiOsaoRrf0eUGFph14Zmnno5wrknmSdfdYTzpK7drq0JW6y6Wq2zx6zXGrt2kFnr1klSfXubVbf61V57zCDhxd5LsieUXIc/ZqnZX7y6vfMvHfrzeW+bd99Thd8fRblHJLPeNgURJumeoNWuLYfe8nv89lSFwDv+CUXo+exK/x4RpT908AQeAAAAiBEaeAAAACBGaOABAACAGKGBBwAAAGKEBh4AAACIERp4AAAAIEZo4AEAAIAYoYEHAAAAYoQGHgAAAIgRGngAAAAgRuys2p/deJM9aFD24mLTKT/QvLo6Z9WNHzvaHvMDe+9h16bMH3VCc9slKYwQqxu6efJmRLkk9Za9SOf6QYPsMTNZ7zi9yVvXTMaPqW6o9+OnQ3m1qYwf051JmZdU2t9P3UUzeltSc6sX097c4sW+S1JbS7Nd29vZ5RUG/rnf0FBn1U0Yv4s9Zjrjx3S7l2ngXqM7qCdeetqudQ9/IuE/Y8pmvWM6aHS1PeZe/mmiGnnXVF3oXaNRa+uDNV5dh3/tl1736irWVdhjJssRdmrBHLPgz/v5Nv9+EnZ751+i119+ssM8p/P+fiomy3Ztd9mbo7vbeuwxC6u77drmSu+kWhs02GN2VIyy6ioGjbDHzCT9uced+SO0ZxaewAMAAAAxQgMPAAAAxAgNPAAAABAjNPAAAABAjNDAAwAAADFCAw8AAADECA08AAAAECM08AAAAECM0MADAAAAMWJHfXV3+klbhS6vNu2mVkpqM8Pj8hHGLO2+m13bHXqRcIkISazZjJ9e56ZBlqKku5qxYLWDGu0xE1GixsyUxULZT5lLRkhNVeAt31+6VJa3/5ctf8ke87VVq+zatWu8NMauLjMxVVKpx0+CLXR510l3T6c95qhRQ6260aN2ssesjJDEKvOYhnYe346pWGHGZkoqmenCyQhJrO7Sa9Rhj1ld8ufovLxrrypsssesT661awd1NVt15ZX2kNIb3jmdXVdpDxn4AZ9St7f8Urd/3wu6/NTUYo+3/JZee0i1lrx17X3dT+FNvuaf01213tzb2+BvVDjYv0uWBpesus6snxhcqPWWX19bZY9ZkUzbte49ItjK9wiewAMAAAAxQgMPAAAAxAgNPAAAABAjNPAAAABAjNDAAwAAADFCAw8AAADECA08AAAAECM08AAAAECM0MADAAAAMUIDDwAAAMSInSc+45Ofsgft6fRi2isr/JjqwIyqrYgQkR746b9qbW216spFP344ncrZtakKrzZM+THRXb1e+HhY9vdpIkL0eTrlRRWnImxTOu1HFQcJ75wKA3/M3tAbs7vsnyeVNX78c31dnVVXKvjLzyX967R5jRd//epry+wxx48db9UlE/55WjKPkyQlzeMfYcgd0gc+ONquLfYWrbpM2j+mrvqUHztfHa6ya3M9q626bHmFP2bQZNcWVpjn6ev+HF182Yu9D9f4Ywbd/nxaLnjjdpb85Xcn/OW7q9ruD6k2d9mht+8laWRbxq5tyJu9RITlpzLevVySuhPdXmHO67kkqVyXteqygdebSlJGPXZtIO8EiHCaWHgCDwAAAMQIDTwAAAAQIzTwAAAAQIzQwAMAAAAxQgMPAAAAxAgNPAAAABAjNPAAAABAjNDAAwAAADFCAw8AAADEiB1zV+71Y0uT5s8Ffr6mVJWptOoqcl4ilyR1dftJX529XirZspeW2WNmMn7C5eixO1t1S1953R7z17/5rVVXjJBwmcv6+989VpVmCq0k1dXU+LW11VbdfvvtbY/ZOLjeqhu300h7zETgXynJwLv2Ct1+ylwqwvHvGjLIqhsxvM4ec8TI4VZdqeQnB3Z2RkjCNROjzV2/w0qG/j5NJLxjlYkQXZhJemmQVSn/QCWKZmqkpKDs1bauW2mPWVPwko0lKdFea9U1v+xmgUp/f+glq668zt+npYI/n/SaXUIpQmJvKcI9qmzW1g0fao+ZyHvzSXWEe9mgCGnhjTVebanGn08TNRHSfRu87c8M9no+Seqs9e477X4bq94IPW865Z1/EQ6T5T1+ywEAAADihQYeAAAAiBEaeAAAACBGaOABAACAGKGBBwAAAGKEBh4AAACIERp4AAAAIEZo4AEAAIAYoYEHAAAAYoQGHgAAAIgRO3/4zl/fbw9a7vUitRMq2GNWZfJWXU2E+OExE3ayaxsbqqy6huGj7TEHDR5i1+Yqc1Zd87PL7TGfefYVq64rDO0xU17y9Zu18qKKqyu96GVJmjB6Z7v2w/u/z6prqKy2x6xMepdUOUKkcm+haNcWSz1WXWdLs7/8knc9S1JF3jtP6+r8mOyVb3jR801Na+0xKyKcU0OHeddpPu9HtA+u8c+puHju+Rfs2rDkXfuB/Dj3TDJt1Q3O+ved3Ro67Vr3lKqr8mLfJakqnbFr04E393SHLfaYq1parbreFv8ekfB3v0o93rhlecdekqpqa+3ahpEjrLqhGf/aLyW856bVEe4RQ1Le9SRJqvSuqd50tz1kOe1fp6ka7zwtVtTbY77R7u2s1Z3+yZdKRzinqrzrNJ2O0CAZt1KewAMAAAAxQgMPAAAAxAgNPAAAABAjNPAAAABAjNDAAwAAADFCAw8AAADECA08AAAAECM08AAAAECM0MADAAAAMUIDDwAAAMSIl2kr6fFFz9iDVpgRtD09XkyzJGUyXgTt/h/6gD3m8tdesWvXrPDqJu25pz1mpsKLnZekzh4vAjid8yOd3/e+va267q4ee8xM2j6lNGGXsVbdnrvvao85YnCdXVuT97LPy91+/PIrb6y26latW2ePuaLJG1OSOto7rLrm5mZ7zJ7eCMc/4x3/TNY/90tFL069t7doj5mvq7ZrJ8m7pmtr/TF3GdZo18bF6ytW2bWppDefl4r+uZdMenHq+Z1q7THXtbbZtavb1lh1Q4f4Ee2KMJ/3ypunEnk/zn342KFWXbHSv/aSvf5zw4aqequusXawPWYm7c89Crz5rKtYsodsNefonq5ue8xlVd6YklRIeOdJd6+//FLC3/5COmPVNa0eaY/5Rtm7R7SVvHu+JKVz3npK0hDlrbpsLsIzc+N2whN4AAAAIEZo4AEAAIAYoYEHAAAAYoQGHgAAAIgRGngAAAAgRmjgAQAAgBihgQcAAABihAYeAAAAiBEaeAAAACBG7NjM1a8utwcdVO+lp+20k59GuPveE626TNZL45OkxU/+2a4dYibiVQV+ItmqJjPeVVJljZce2FDjp8xNP2qKVZcI/J/zamv9lMPBDQ1W3dq1XsKhJC1dvsSubWn2koBbW/w0xrbWTqtuXYefnLe2tdmuLfX2WnUpMy1ZkjJZP5EukfTOldoa/zqtr6vz6ob4SajZvJecJ0mZCq+2PUJy4o6ordVP1q7IeYmINbX+cWoc6s0nyWSXPeYbb7xu1+ZTa626NYGXGilJ+U5/7qnr8q69fLWflr3r7jtbdcFI/3rOJfx7VD7lnSddbf4xbWvy7yfdrV4ScHuHnxjc1u7N0cm0VydJXaE/94R5r0dJDPITe5NZv3ZNl3dNr8v6qamduUFWXbnS600lqRThHtmZ9vqejl6/P3TwBB4AAACIERp4AAAAIEZo4AEAAIAYoYEHAAAAYoQGHgAAAIgRGngAAAAgRmjgAQAAgBihgQcAAABihAYeAAAAiBEaeAAAACBG7Ezl1/6+2B60tabKqjvmiC/ZYx511KFW3QO/u98es7HOW09JGpr3aitSESKlg7K//Noaq67arJOkXN6LtC7Kj/7OZP2Y7GLJ2/43/v6aPebLq1batYVeb7tSuUp7zOpqL9J5SM6PiO8t+JHarnTGj4lOJv2f893a6upqe8yaGq82mfSvvfaOTrt25comq6672x9T79/Hr42J1qZVdm1PNmPV7Tr+A/aY48fvYtWtXPq0PWZFzp/P8mnvmk4muuwxgwjP2Cors1ZddohXJ0mpwGsRyi3+PSJZttsOlc05ur211R6zRe12bck8/KmMdz5L0qA67zxJ1/pzdGloya7VCK8suVPSHrJrhH9O9QZDrbpydpQ9pszazsDv+Qq9/n13ZXu3VVcs+teJRm65hCfwAAAAQIzQwAMAAAAxQgMPAAAAxAgNPAAAABAjNPAAAABAjNDAAwAAADFCAw8AAADECA08AAAAECM08AAAAECM0MADAAAAMWJnGnd3dtiD7rXPJKvukEMPscdsqGuw6g744BR7zETCj7WtTntRwTVVlfaYyYwf053MVHiFEbaprIJV17JujT1mTcqPVC7Li2reZVfvfJKkITtNtGvXrvPit6vr6uwxe0ve/g9C/2fndMKPtC6Xy1Zdd7cX/SxJ7R1+9HhY9iK92zv9MV9ZscKq6+7qtMfs7fS3v1TytilvRtnvqHp7/Tj3IcO8+XzM2HH2mLmcF5O+08ix9pjDdvJi7yVpZHKtN2ZmnT1mQ7LZrq3uMM//oj2kwjbvmHa3+tdeNme3HQpT3jxZP3qIPWZlo3fuSVJXZ49Vl0n59/Jyr1lYFdhjJkf6teFw7x7VO8Q/UVqS1XZtT9ho1a3pNXseScvbzF6m2GaPWer1tz8se/s0nfHv5Q6ewAMAAAAxQgMPAAAAxAgNPAAAABAjNPAAAABAjNDAAwAAADFCAw8AAADECA08AAAAECM08AAAAECM0MADAAAAMWJHou2y+772oMef/AWrrrOUtsf8+wsrrbpy4I+Zq/GS+ySpN/SSztY2+2mEKvvpdaVSl1UX+CF3KstLmWtr9dPLkivdmDnp9VWrrLqeHn/McrefnlaZ91JzX1ryqj3mSy+/bNUFKf88bRjsJwf29HjHtKWlxR5zbVOTXVs2U0uTCS8xVpICszZf4Sf31eX8xOSKnJew2tXuXaM7qvrGYXbtpH3eZ9UVQj+5sGmtl+5bGeG5VW/WT2LtDL35fE23v/wg9K+TsMO8R0Q4TcMu73ru6faSMCUp0e1vU1ublwBfjJACHBb85WeSGauut8tL9ZakdevMubfWP0/y1f55Wqzw9tWaop/qvqzTT2JdGXr381WBf99fbQbRFlJ19pi5CKnyqZQ5TxX8fergCTwAAAAQIzTwAAAAQIzQwAMAAAAxQgMPAAAAxAgNPAAAABAjNPAAAABAjNDAAwAAADFCAw8AAADECA08AAAAECM08AAAAECMpNzCT514oj1o/bCdrLqnnvEj6gsFL1a3UPZjkkvyY7rLZe9nnZTMTF9JgfxY3VLJ265yhDGT9o9v/piFor//m9astOpKRT/7O+EvXrU1dVZdb6HHHnPtGi/6W0n/3FvT1G3Xdvd6+6rU5Y9ZLPgx6amMN6Xkc15EuSRlzRM1VfT3aaHbj+mWvOjxfGUuwpg7nj322suuzVXVWHUrV/kR9aWSd5yyoXmNSurSWru2OWy26lrUZo/Zoha/tmeNVZdcZQ+pwJuipbYI97KyX9vZ0W7VheWiPWbgnSaSpGzWu6bLvf7yuxLmfBr4z1e7Iiy/p8erfaNYZ4+5plRh165LVll17Sl/+Z3JQVZdT1u1PWZ3wu/lkimvNp22W24LT+ABAACAGKGBBwAAAGKEBh4AAACIERp4AAAAIEZo4AEAAIAYoYEHAAAAYoQGHgAAAIgRGngAAAAgRmjgAQAAgBixY6EWPfm/9qB//esiqy6Qn96VSKatunTaT0NMpKIkJ3rLT0VI2Exl/J+fcjlvXVNpbz0lKZPNWnWJjH+ckqG//JpMvbf8rJfcJkm9ST9mr7vkJdIV/eBAZfJ5q66300937ezw0ygLRXPcXj9dVYkICaclb2cVOzrtMdvbvNTYSjMFVpIG1/qJfKm8d+1l/FN/h7R0qZ9aunxZs1UX+LcoBeZ5WlXln/vtCf/aazcTVrsDPwm2M+nPE90p79prTHvpppKUrPD2fxD4J38Q+ve9bLV37wkCP4K7HKG2GJoJ6BGCnZNFb1+Vcv69rLfGP0/eUK1Vt7rXS0uWpLWBdy+XpNWhV7umt9Jf/ipvn2Y6/MTafM7rjyQplfOuk0R2694keAIPAAAAxAgNPAAAABAjNPAAAABAjNDAAwAAADFCAw8AAADECA08AAAAECM08AAAAECM0MADAAAAMUIDDwAAAMQIDTwAAAAQI3ZO9cN/eMAetLO12arLpLzYeUmqyLvR5370djJCbWj+rJNI+bHzqWxg1+ayXqR0LkL8bybn7f9UvsEeM5fxYpolKZPw9n86wo+ZQc7fp0HgRY/39vjR691dXqR1b68/ZpTob5nblJJXJ0lKRDgA2YxVVlfpX3s1lV78dGWFf+1l0/4+zQReTnpQ8uPMd0TLnnjVru3t6bbqkgk/ejyVNue+Kv/cr69rsWtr5dU2JJrtMQcn19m1Q1KtVl1jqs0eszHh1VaEEWLnk35tMmXed/1pX0EqSrF3rpSLJXvI3rJX257x57Om7kF27ZqeKq9ONf7yg0p/+Umvl+k011OSsqu9Y5ru9e9lybQ/TyQz5vFPRzj3DDyBBwAAAGKEBh4AAACIERp4AAAAIEZo4AEAAIAYoYEHAAAAYoQGHgAAAIgRGngAAAAgRmjgAQAAgBihgQcAAABihAYeAAAAiBE7z3xoox+ru6JztVVXKjXbY9Y0eFHBqcCP3m5t8mOq21o7rLreYsEesxwler3sR7/bzJjydG6IPWSY8c+Tonn6Jcw4bUnKZ/J2bWXeqy31Fu0xVTKPU86PyQ4y/uJzGW+fVuT8OPNBVX5M9qiqaqtu5PBGe8x8zqvr6fYj4hNht12bSnrx13U1XkT4jqqyxz+n2ls6rbpy2T9O2Tpv/yeS/rXXIn8+6a5ot+o6y36cemuEeX9N6MW5r5B/36kLvNp8yp8jy0l/m8rmM8Yg4e/TZNKfUDNp7x5ZjnBMw7I3ZlfKn3fXJmvt2rZknVXXmqq3x+zO+PN52DHSqhvc5W9/2ptOVGz2z/0gwjmdyHn33Vyl359ay92qowEAAADYpmjgAQAAgBihgQcAAABihAYeAAAAiBEaeAAAACBGaOABAACAGKGBBwAAAGKEBh4AAACIERp4AAAAIEbsJNaw14y6klRb6SWdtXX7KXu9JS/lbrfdJtljhsO9dFdJWtW0xqxrssdsb/aS8ySps9Pb/6Wynx4WFr39X5nyU95223u8Xft6q5ecubrVT8zt6vHOE0nq6vL2aVJ+yl424537lWk/DbCu0owildRY56XnDR8x1B5z3Mhhdu3QrJdy2d7Rao+5Zu0qqy6Z8Z9HVFb6135VtZfw2dDgJxfukNb22qXZbu88KRQjJHyGXgr24Eo/WVpJP123w0xt7c5HSOztsW/RKvSaCZ+hnwbZUfbmnpqEn8I7eOgou7atxzun2nr8hM1SKbRrw6J3nvp3CCmRNNNdk34SaXdmsF3bkxth1YX5newx63v8e0RVu7e3Cqv8Y9r5WodVl+jyj1Smyr9OMxXeMc2b15OLJ/AAAABAjNDAAwAAADFCAw8AAADECA08AAAAECM08AAAAECM0MADAAAAMUIDDwAAAMQIDTwAAAAQIzTwAAAAQIzQwAMAAAAxYuc0r3ntVXvQUm+3VdclP9K48+WXrbpBZkyxJDXm/KjidE+nVVeRLNtjdqUiRDrLjRQv2WPK3P+dXU32iAd9YE+7dtLue1l1L7+83B5zTfM6u7a7x4teV9k/pumEF72dS/jHvjHnxy/XVXrndCnCebKiyd//zzW9YdUFuYw9Zs2QQVZdvqbGHjNf7V/7gwY3WHVVtbX2mDuizmWtdm1Y9uaz3gjL713dYtVVdHnXqCTlB/n3k0SVt7Y9+Sp7zLasP09kUt52VSlrj9kq7zrJu7cnSUNGvs+undA43Kpb1+Ide0nq6DbnfUnFojdPlv3DpCDwjlMx8Of9YsqbIyWp2DnYqiuvDewx219utmubXm33Ctv86zTbU2HVpUP/3E+X/XtURegtPxPhmDp4Ag8AAADECA08AAAAECM08AAAAECM0MADAAAAMUIDDwAAAMQIDTwAAAAQIzTwAAAAQIzQwAMAAAAxQgMPAAAAxAgNPAAAABAjKbdw2Ag/qvfV5a9adaWeCPnLCa926d//bg/Zksn7izfrOsp++HdH0a8tF9195Wc6JxJeVHKhp80ec9Ej99u1H630IsUnJfyfM7tqq+3ashmTHdj7XuoudFt1LSWvTpJWrXnNrl323BtW3ZouP/a+O+3v/9yQequuflijP2aNd50mK/zo63xtjV2bzXtx8kHSnk53SFW9Xpy4JLW2eOdfWCz7KxB489m6liZ7yO76tL9485TqrfS3qVDpz+dd+TqrrtW8niQpX9Vl1aUi3MuClwt27Qcz3j0iH9TaYyYy/j4tm1NfGKGVKfR69532dv/cK6zssWtbX3/Fqutc7Y9ZbPOuPUlKmfNERcmbdyUp1ePtq0TKX890yp/PUz1Jqy4I/HPPwRN4AAAAIEZo4AEAAIAYoYEHAAAAYoQGHgAAAIgRGngAAAAgRmjgAQAAgBihgQcAAABihAYeAAAAiBEaeAAAACBG7Kip0RNG24O2tnspex2v+ol4KnsJWt3yUs4kaW3JT8TLmLuqID+SrVT21zVKwqorKG/9MZc89We79pU2L5GvMeEnB4ahv00lM4m2PeGP+UboJRcu6em0x3y16CfideW987R61Ah7zCFjd7Zrc3VmEm4iQmpp0ku5q6ryUhslKV/jJ/Ym0lmrLgze289DaiOkYfZ0e+d0b4t/nbiKGX/e7+r2r/1ki3f8S1X+8ssVEebovFcbVvkJn515rzb0Q5C19HVvjpSknf7upbqPCP1tihAaK/cWWYhwmNrMtPa1rf6Ktjb7vURvl3eeZgN/jqxM1tm1qYJ5soQR+qPkGqssk/HuJZKUzvr33SDpbVOoCBeKdtlixXv7jgMAAADEDA08AAAAECM08AAAAECM0MADAAAAMUIDDwAAAMQIDTwAAAAQIzTwAAAAQIzQwAMAAAAxQgMPAAAAxAgNPAAAABAjdp55Tf0ge9DGYUOsuhWvNtljeqH3kh9SLfWUI8QPm3Ul+WOWFCF/eRuwlx7hx7zeLj8mu6Nptbf4bJ09ZrKn26593TxWi+RHKr+Y9M7Ajmo/+rtyp3q7tnHESKtuUKN3jUpSrjJv1/aYZ1UY+ldqLuXFXyfNOklKJiPUprxpMhFhzB1RtlRh11aq0qpr7+h8u6uzSWGHX1vq9Ofoct47p8st/phhLsI9wr1Mc/6Q9pgRTv1ysWjX9ua94x+E/kYFvf7y24veMX0jQi+xtuQd097Av/GmgwjXXlBt1VWUq+wxUxm7VMVgjVnZ7i8/4d2jg4Td8ipI+BNFkPB2gFvn4gk8AAAAECM08AAAAECM0MADAAAAMUIDDwAAAMQIDTwAAAAQIzTwAAAAQIzQwAMAAAAxQgMPAAAAxAgNPAAAABAjdixVRc5PY8zmslZdOuP//FAyE9GiZJsWI1VHyXjdfkNum8W7ObhSe9nfp8/1eCl7tWk/Ze7ZrpV27d+KXtLamhr/3G8YPdaqGzbGS0yVpLrhfgpyttJLuEyU/WuvECE1NZnyrv1U2k+kS2XclDv/PC2V/OTEIPDGTURITtwRpVP+tZ9Mefs/kSzYY4bm3BPKT0EuFyIcU3fz/VNP8kNDJXdXRUhiDd1g66R/7RXMJFJJamr3MtCzERI2m7r8hM/VBW/5nUn/nMrX1ll1Vbkae8xcwr9HJmXOp6Gfql6KEG+cSHr3/UTCX34iaSaxBn5ksDufSFJgXlRBpAt6y97bdxwAAAAgZmjgAQAAgBihgQcAAABihAYeAAAAiBEaeAAAACBGaOABAACAGKGBBwAAAGKEBh4AAACIERp4AAAAIEZo4AEAAIAYsfOHCxGixzu62qy66jo/07m7w4vKLZX92PdSwv/5peQOGyEmOvBXdZsIy178dZj0Y6o7En5U8B8LLVbd8k5/zDV5/5imho2y6oaNbLTHHNvo1Q6uHWSPmaissmvdkPDuCCdfKuUf/4qcF9Ody/vblMp480SuIm+Pmc35c0867cekv5dFmXt7e735PJvzz71iwbtHRUhIVxj480nZXdVEhHtElEdsbm2EMcPAu0cowr20EPrnyfJSt1XXbN+gpa60uU2SEtU1Vl1VvtIes96cp/KhP58FJW/elaRCwasryj9PE0l/n2ZSSasulfa3KZH0rv1U2p9PkhHue4mkt01bG0/gAQAAgBihgQcAAABihAYeAAAAiBEaeAAAACBGaOABAACAGKGBBwAAAGKEBh4AAACIERp4AAAAIEZo4AEAAIAYoYEHAAAAYsTOiu0tedHXkpTMeBG89UP8+OHeLi9Wt1iIEOftl6rXjAkPSxHihyMsP5AXVRy40deKEJOd8qPkUyl/+b1575j21A6yx9yldqhdWz/IjMmu8WOSq/NebZSI+O6if6IUVLTqwggx1cm0f/zlnlMRztN0xlvXpBnRLUnpKJHaZkx2GCF6fEdUCr04c0kKzEOVq/TP03LGW3655B/7Uug/4yqnveMf+pukIBuh1h23wr/2lDPrIlx7UZ4als0TpZSqsMesz1TZtbm0dwAySX+fZpPeHkgW/T1V7PXnnpLZyyjhb1MisS2eBfvLd+foIMI2Jc3jJEkJ+362de8RPIEHAAAAYoQGHgAAAIgRGngAAAAgRmjgAQAAgBihgQcAAABihAYeAAAAiBEaeAAAACBGaOABAACAGKGBBwAAAGLEjqSLEMapukFe0llV3v/5oVTwEqyKEeJViyW/NjRTwRIJP+UviPDzk5v0lUhESMQzk8ZSZrKuJOUjJPJVV3tJvEOq6uwxq7JudKBUmclbddmsf/L3mKVtGf/Yd5W8dFVJKgXeuLmUf55mzZQ7SUpnvOTCRIQxAzPlLwz987RQ6LVrMxmvNpP2t2lHFCWMMVfhxYZm0hGSpc0U7HLZP/fL5QjLz5hp2RX+jgpy/vLd1NYgF2H5efO+Y6bQSlI6wn0vk/Qm1MqEP+9nAv/4Z8zY3GSEbXLzigthhFTzwO9lymYvkYpwQSej1Ca9/R8k/PtelGRvV6nkJ0uXkt7+j7KfHDyBBwAAAGKEBh4AAACIERp4AAAAIEZo4AEAAIAYoYEHAAAAYoQGHgAAAIgRGngAAAAgRmjgAQAAgBihgQcAAABihAYeAAAAiJEgjJI/DgAAAGC74gk8AAAAECM08AAAAECM0MADAAAAMUIDDwAAAMQIDTwAAAAQIzTwAAAAQIzQwAMAAAAxQgMPAAAAxAgNPAAAABAj/x+xt+xuyGcmygAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 800x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAvAAAAGTCAYAAABOLiYTAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAATBpJREFUeJzt3XmUXWWd7vFnn7nGVGVOGENCmMJkbByAEJkFCXY3RgYFYqNBRrUVRK+QKDRNawOKBERtBiGCCDTIhYaooILQXmTSCE0ISQgkIamkhtRwxr3vH6xUU6kMz4ZA3PH7WYu1qJNfvXs4e7/vr06dOk8QRVEkAAAAAImQ2to7AAAAAMBHAw8AAAAkCA08AAAAkCA08AAAAECC0MADAAAACUIDDwAAACQIDTwAAACQIDTwAAAAQILQwAMAAAAJQgOPRJs1a5aCIFBbW9sWG/P000/XzjvvvMXGW99NN92kIAj01FNPbbZ26tSpmjp16ru2LwAAIHlo4LchQRBY/z366KNbdT+nTp2qSZMmbdV9AAAASKrM1t4BbDk/+clPBnx9yy23aN68eYMe32OPPd7L3cI78PDDD2/tXQAAAH9laOC3IZ/61KcGfP3kk09q3rx5gx5fX29vr+rr69/NXcPblMvltvYuAACAvzK8heZvzLq3r/zxj3/UlClTVF9fr6997WuS3nwLzqxZswZ9z84776zTTz99wGMdHR36whe+oB122EH5fF4TJkzQFVdcoTAMt8h+Pv/88zr99NO1yy67qFAoaPTo0frMZz6j1atXb7C+ra1N06dPV3Nzs4YNG6bzzz9fxWJxUN2tt96qyZMnq66uTkOHDtWJJ56opUuXbnZ/li9frhdffFGVSmWztbfffrsmT56spqYmNTc3a++999Z3v/vdQXWlUklf+tKXNGLECDU0NOjv//7vtWrVqgE1678H/tFHH1UQBLrjjjv0ta99TaNHj1ZDQ4OmTZtmHQcAAEg+XoH/G7R69Wp99KMf1YknnqhPfepTGjVqVKzv7+3t1SGHHKLXX39dM2fO1I477qjf//73uuiii7R8+XJdffXV73gf582bp1deeUUzZszQ6NGjNX/+fN1www2aP3++nnzySQVBMKB++vTp2nnnnXX55ZfrySef1Pe+9z21t7frlltu6a+57LLL9I1vfEPTp0/XGWecoVWrVumaa67RlClT9Mwzz6ilpWWj+3PRRRfp5ptv1qJFizb5B67z5s3TSSedpMMOO0xXXHGFJOmFF17Q448/rvPPP39A7bnnnqvW1lZdcsklWrx4sa6++mqdc845uuOOOzZ7fi677DIFQaALL7xQK1eu1NVXX63DDz9czz77rOrq6jb7/QAAILlo4P8GrVixQtdff71mzpz5tr7/yiuv1MKFC/XMM89o1113lSTNnDlTY8eO1be//W398z//s3bYYYd3tI9nnXWW/vmf/3nAYx/84Ad10kkn6bHHHtPBBx884N/GjRune++9V5J09tlnq7m5WXPmzNGXv/xl7bPPPlqyZIkuueQSXXrppf2/cZCkf/iHf9D++++vOXPmDHj87fq///f/qrm5WQ899JDS6fQma4cNG6aHH364/4eRMAz1ve99T52dnRoyZMgmv3fNmjV64YUX1NTUJEl63/vep+nTp+uHP/yhzjvvvHd8HAAA4K8Xb6H5G5TP5zVjxoy3/f133nmnDj74YLW2tqqtra3/v8MPP1y1Wk2//e1v3/E+vvVV5GKxqLa2Nn3wgx+UJD399NOD6s8+++wBX5977rmSpAceeECSdPfddysMQ02fPn3APo8ePVq77rqrHnnkkU3uz0033aQoijb78ZItLS3q6enRvHnzNnuMn/vc5wb8JuHggw9WrVbTkiVLNvu9p556an/zLkknnHCCxowZ03+8AABg28Ur8H+Dtttuu3f0x5ELFizQ888/rxEjRmzw31euXPm2x15nzZo1mj17tm6//fZB43V2dg6qX/ebgHXGjx+vVCqlxYsX9+9zFEWD6tbJZrPveJ+lN39z8LOf/Uwf/ehHtd122+nII4/U9OnTdfTRRw+q3XHHHQd83draKklqb2/f7HbWP44gCDRhwoT+4wUAANsuGvi/QXHfI12r1QZ8HYahjjjiCF1wwQUbrJ84ceLb3rd1pk+frt///vf6yle+ov3220+NjY0Kw1BHH3209Yey679HPgxDBUGgBx98cINvbWlsbHzH+yxJI0eO1LPPPquHHnpIDz74oB588EHdeOONOvXUU3XzzTcPqN3YW2yiKNoi+wIAALZNNPDo19raqo6OjgGPlctlLV++fMBj48ePV3d3tw4//PB3ZT/a29v1q1/9SrNnz9bFF1/c//iCBQs2+j0LFizQuHHj+r9++eWXFYZh/1texo8fryiKNG7cuC3yA8am5HI5HXfccTruuOMUhqHOOuss/eAHP9A3vvENTZgwYYtsY/1zEUWRXn75Ze2zzz5bZHwAAPDXi/fAo9/48eMHvX/9hhtuGPQK/PTp0/XEE0/ooYceGjRGR0eHqtXqO9qPda9Mr/9K9KY+3ebaa68d8PU111wjSfroRz8q6c0/Vk2n05o9e/agcaMo2ujHU67jfozk+uOkUqn+prpUKm3ye+O45ZZbtHbt2v6vf/7zn2v58uX9xwsAALZdvAKPfmeccYbOPPNM/eM//qOOOOIIPffcc3rooYc0fPjwAXVf+cpXdN999+ljH/uYTj/9dE2ePFk9PT3605/+pJ///OdavHjxoO9Z36pVq3TppZcOenzcuHE65ZRTNGXKFP3bv/2bKpWKtttuOz388MNatGjRRsdbtGiRpk2bpqOPPlpPPPGEbr31Vp188snad999Jb35w8mll16qiy66SIsXL9bHP/5xNTU1adGiRbrnnnv0uc99Tl/+8pc3Or77MZJnnHGG1qxZo0MPPVTbb7+9lixZomuuuUb77bffFk3AHTp0qA466CDNmDFDb7zxhq6++mpNmDBBn/3sZ7fYNgAAwF8nGnj0++xnP6tFixbpxz/+sf7rv/5LBx98sObNm6fDDjtsQF19fb1+85vf6F/+5V9055136pZbblFzc7MmTpyo2bNnb/YjEKU3/9D1G9/4xqDHDzvsMJ1yyimaO3euzj33XF177bWKokhHHnmkHnzwQY0dO3aD491xxx26+OKL9dWvflWZTEbnnHOOvv3tbw+o+epXv6qJEyfqqquu0uzZsyVJO+ywg4488khNmzbNPU2b9KlPfUo33HCD5syZo46ODo0ePVqf/OQnNWvWLKVSW+4XXl/72tf0/PPP6/LLL9fatWt12GGHac6cOSTqAgDwNyCI+Is5IDEeffRRfeQjH9Gdd96pE044YWvvDgAA2Ap4DzwAAACQIDTwAAAAQILQwAMAAAAJwnvgAQAAgAThFXgAAAAgQWjgAQAAgAShgf8btvPOO+v000/v//rRRx9VEAR69NFHt9o+rW/9fXwvTJ06VZMmTdqiY77bx3H66aersbHRqg2CQLNmzXrX9gXAtu/000/fZKgdgHcXDfxWctNNNykIgv7/CoWCJk6cqHPOOUdvvPHG1t69WB544IGt3hAGQaBzzjlnq+4DALzbFi1apHPOOUcTJ05UfX296uvrteeee+rss8/W888/v7V3b6O6uro0e/Zs7bvvvmpsbFRdXZ0mTZqkCy+8UMuWLdvg90yfPl1BEOjCCy/c4L+ve9EpCALdeuutG6w58MADFQSB9aLM5l4IeS/WmTlz5uimm256V7eBbQNJrFvZN7/5TY0bN07FYlGPPfaYrrvuOj3wwAP685///J6nak6ZMkV9fX3K5XKxvu+BBx7Qtddeu9WbeHj6+vqUyXDrA0lz//3365Of/KQymYxOOeUU7bvvvkqlUnrxxRd1991367rrrtOiRYu00047be1dHeCVV17R4YcfrldffVWf+MQn9LnPfU65XE7PP/+8fvzjH+uee+7RSy+9NOB7urq69Itf/EI777yzfvrTn+pf//VfFQTBBscvFAqaO3euPvWpTw14fPHixfr973+vQqHwrh3bljZnzhwNHz78Pf/NM5KHVXwr++hHP6r3v//9kqQzzjhDw4YN05VXXql7771XJ5100ga/p6enRw0NDVt8X1KpVKImOrw9PMdA8ixcuFAnnniidtppJ/3qV7/SmDFjBvz7FVdcoTlz5iiV2vQv1t+t9WNjqtWq/uEf/kFvvPGGHn30UR100EED/v2yyy7TFVdcMej77rrrLtVqNf3Hf/yHDj30UP32t7/VIYccssFtHHPMMbrvvvvU1tam4cOH9z8+d+5cjRo1Srvuuqva29u37IEBWxlvofkrc+ihh0p689ek0v/+Sm/hwoU65phj1NTUpFNOOUWSFIahrr76au21114qFAoaNWqUZs6cOWiiiqJIl156qbbffnvV19frIx/5iObPnz9o2xt7D/x///d/65hjjlFra6saGhq0zz776Lvf/W7//l177bWSNOAtQets6X18J+69914de+yxGjt2rPL5vMaPH69vfetbqtVqG6z/4x//qA9/+MOqq6vTuHHjdP311w+qKZVKuuSSSzRhwgTl83ntsMMOuuCCC1QqlTa7PwsXLtTChQs3W1epVDR79mztuuuuKhQKGjZsmA466CDNmzdvUO3rr7+uj3/842psbNSIESP05S9/edDxrf8e+FmzZikIAr344ouaPn26mpubNWzYMJ1//vkqFoub3T8A775/+7d/U09Pj2688cZBzbskZTIZnXfeedphhx36H9vU+vG73/1On/jEJ7Tjjjv2z11f/OIX1dfXN2js//zP/9SkSZNUKBQ0adIk3XPPPfZ+33XXXXruuef09a9/fVDzLknNzc267LLLBj1+22236YgjjtBHPvIR7bHHHrrttts2uo3jjz9e+Xxed95554DH586dq+nTpyudTtv7G5e7Btx444069NBDNXLkSOXzee2555667rrrBtTsvPPOmj9/vn7zm9/0r6VTp06V9L9vu33sscd03nnnacSIEWppadHMmTNVLpfV0dGhU089Va2trWptbdUFF1yg9T8l/Dvf+Y4+/OEPa9iwYaqrq9PkyZP185//fNAxrXur0G233abddttNhUJBkydP1m9/+9ste/LwjvAK/F+ZdQ3dsGHD+h+rVqs66qijdNBBB+k73/lO/1trZs6cqZtuukkzZszQeeedp0WLFun73/++nnnmGT3++OPKZrOSpIsvvliXXnqpjjnmGB1zzDF6+umndeSRR6pcLm92f+bNm6ePfexjGjNmjM4//3yNHj1aL7zwgu6//36df/75mjlzppYtW6Z58+bpJz/5yaDvfy/20XXTTTepsbFRX/rSl9TY2Khf//rXuvjii9XV1aVvf/vbA2rb29t1zDHHaPr06TrppJP0s5/9TJ///OeVy+X0mc98RtKbP5xMmzZNjz32mD73uc9pjz320J/+9CddddVVeumll/Sf//mfm9yfww47TNKbv+bdlFmzZunyyy/XGWecoQMOOEBdXV166qmn9PTTT+uII47or6vVajrqqKP0gQ98QN/5znf0y1/+Uv/+7/+u8ePH6/Of//xmz8/06dO188476/LLL9eTTz6p733ve2pvb9ctt9yy2e8F8O66//77NWHCBH3gAx+I9X0bWz/uvPNO9fb26vOf/7yGDRumP/zhD7rmmmv02muvDWiEH374Yf3jP/6j9txzT11++eVavXq1ZsyYoe23397a/n333SdJ+vSnP23v87Jly/TII4/o5ptvliSddNJJuuqqq/T9739/g2/xrK+v1/HHH6+f/vSn/XPdc889p/nz5+tHP/pR7L8NaGtrs+rirAHXXXed9tprL02bNk2ZTEa/+MUvdNZZZykMQ5199tmSpKuvvlrnnnuuGhsb9fWvf12SNGrUqAHbPPfcczV69GjNnj1bTz75pG644Qa1tLTo97//vXbccUf9y7/8ix544AF9+9vf1qRJk3Tqqaf2f+93v/tdTZs2TaeccorK5bJuv/12feITn9D999+vY489dsB2fvOb3+iOO+7Qeeedp3w+rzlz5ujoo4/WH/7why3+IQ94myJsFTfeeGMkKfrlL38ZrVq1Klq6dGl0++23R8OGDYvq6uqi1157LYqiKDrttNMiSdFXv/rVAd//u9/9LpIU3XbbbQMe/6//+q8Bj69cuTLK5XLRscceG4Vh2F/3ta99LZIUnXbaaf2PPfLII5Gk6JFHHomiKIqq1Wo0bty4aKeddora29sHbOetY5199tnRhi6ld2MfN0ZSdPbZZ2+ypre3d9BjM2fOjOrr66Nisdj/2CGHHBJJiv793/+9/7FSqRTtt99+0ciRI6NyuRxFURT95Cc/iVKpVPS73/1uwJjXX399JCl6/PHH+x/baaedBh3HTjvtFO20006bPbZ99903OvbYYzdZs+46+eY3vzng8f333z+aPHnygMckRZdcckn/15dcckkkKZo2bdqAurPOOiuSFD333HOb3UcA757Ozs5IUvTxj3980L+1t7dHq1at6v/vrfPcxtaPKNrwfHj55ZdHQRBES5Ys6X9sv/32i8aMGRN1dHT0P/bwww9Hkqz5a//994+GDBmy2bq3+s53vhPV1dVFXV1dURRF0UsvvRRJiu65554BdevWrDvvvDO6//77oyAIoldffTWKoij6yle+Eu2yyy5RFL05p++1116b3e6687Wp/966zsRZAzZ0vo866qj+fVxnr732ig455JBBtet6hqOOOmrAOvmhD30oCoIgOvPMM/sfq1ar0fbbbz9onPX3oVwuR5MmTYoOPfTQAY+vO9annnqq/7ElS5ZEhUIh+vu///tB+4atg7fQbGWHH364RowYoR122EEnnniiGhsbdc8992i77bYbULf+K6h33nmnhgwZoiOOOEJtbW39/02ePFmNjY165JFHJEm//OUvVS6Xde655w54a8sXvvCFze7bM888o0WLFukLX/iCWlpaBvzbxv6Y6L3exzjq6ur6/3/t2rVqa2vTwQcfrN7eXr344osDajOZjGbOnNn/dS6X08yZM7Vy5Ur98Y9/7D++PfbYQ7vvvvuA41v3Nqh1x7cxixcv3uyr75LU0tKi+fPna8GCBZutPfPMMwd8ffDBB+uVV17Z7PdJ6n8VaJ1zzz1X0pt/pAxg6+nq6pKkDX5CytSpUzVixIj+/9a9pfGtNvQbuLfOhz09PWpra9OHP/xhRVGkZ555RpK0fPlyPfvsszrttNM0ZMiQ/vojjjhCe+65p73vTU1NVu06t912m4499tj+79t11101efLkTb6N5sgjj9TQoUN1++23K4oi3X777Rv9O7JNKRQKmjdv3gb/W1+cNeCt57uzs1NtbW065JBD9Morr6izs9Pev3/6p38asE5+4AMfUBRF+qd/+qf+x9LptN7//vcPmvvfug/t7e3q7OzUwQcfrKeffnrQdj70oQ9p8uTJ/V/vuOOOOv744/XQQw9t9G2neG/xFpqt7Nprr9XEiROVyWQ0atQo7bbbboP+CCmTyQz6deWCBQvU2dmpkSNHbnDclStXSpKWLFki6c0J8K1GjBih1tbWTe7burfzvN1fl70X+xjH/Pnz9X/+z//Rr3/96/4FcZ31J9CxY8cO+kOviRMnSnqz8f7gBz+oBQsW6IUXXtCIESM2uL11x/dOffOb39Txxx+viRMnatKkSTr66KP16U9/Wvvss8+AukKhMGhfWltb7T/eWv/8jx8/XqlUyvohA8C7Z10j293dPejffvCDH2jt2rV64403Bn0Ki7Th9UOSXn31VV188cW67777Bs0R6+bDjc3NkrTbbrsNaPxWrVo1oLFrbGxUY2Ojmpub7RcRJOmFF17QM888o1NPPVUvv/xy/+NTp07Vtddeq66uLjU3Nw/6vmw2q0984hOaO3euDjjgAC1dulQnn3yyvd110um0Dj/8cKs2zhrw+OOP65JLLtETTzyh3t7eAXWdnZ0DfkDalB133HHA1+u+761/+7Du8fWf1/vvv1+XXnqpnn322QHv0d/QC3Ibes4nTpyo3t5erVq1SqNHj7b2F+8eGvit7IADDuj/FJqNyefzg5r6MAw1cuTIjb4isbEJ5b3017SPHR0dOuSQQ9Tc3KxvfvObGj9+vAqFgp5++mldeOGFCsMw9phhGGrvvffWlVdeucF/X39CfbumTJmihQsX6t5779XDDz+sH/3oR7rqqqt0/fXX64wzzuiv29J/qOX8lgXAu2/IkCEaM2aM/vznPw/6t3Xvid/YD9obWj9qtZqOOOIIrVmzRhdeeKF23313NTQ06PXXX9fpp5/+tubDv/u7v+tv+CXpkksu0axZs7T77rvrmWee0dKlS605cd3nuX/xi1/UF7/4xUH/ftddd2nGjBkb/N6TTz5Z119/vWbNmqV9993X/i3B2+WuAQsXLtRhhx2m3XffXVdeeaV22GEH5XI5PfDAA7rqqqtine+NzfMbejx6yx+x/u53v9O0adM0ZcoUzZkzR2PGjFE2m9WNN96ouXPn2tvHXw8a+IQaP368fvnLX+rAAw8c8Gux9a37POAFCxZol1126X981apVm31ldvz48ZKkP//5z5t8RWJjjd57sY+uRx99VKtXr9bdd9+tKVOm9D++7tN+1rds2bJBH7e27nOK16UPjh8/Xs8995wOO+ywd73ZHTp0qGbMmKEZM2aou7tbU6ZM0axZswY08O/UggULNG7cuP6vX375ZYVhSNoi8Ffg2GOP1Y9+9CP94Q9/0AEHHPCOxvrTn/6kl156STfffPOAP3Jc/20ib52b1/c///M/A76+7bbbBnyCzbq5/LjjjtNPf/pT3Xrrrbrooos2uV9RFGnu3Ln6yEc+orPOOmvQv3/rW9/SbbfdttEG/qCDDtKOO+6oRx99dIMfTbmluWvAL37xC5VKJd13330DXkHf0Nss36215K677lKhUNBDDz2kfD7f//iNN964wfoNPecvvfSS6uvr/ypeIAQfI5lY06dPV61W07e+9a1B/1atVtXR0SHpzffYZ7NZXXPNNQN+Gr/66qs3u433ve99GjdunK6++ur+8dZ561jrmtz1a96LfXSte3XireOXy2XNmTNng/XValU/+MEPBtT+4Ac/0IgRI/rfFzh9+nS9/vrr+uEPfzjo+/v6+tTT07PJfXI/RnL16tUDvm5sbNSECROsj6qMY/33zl5zzTWS3swqALB1XXDBBaqvr9dnPvOZDaZ1R+t9ZOCmbGg+jKKo/+OB1xkzZoz2228/3XzzzQPeZjhv3jz95S9/GVB74IEH6vDDD+//b10Df8IJJ2jvvffWZZddpieeeGLQvqxdu7b/E1cef/xxLV68WDNmzNAJJ5ww6L9PfvKTeuSRRzaa3BoEgb73ve/pkksuifWpN2+XuwZs6Hx3dnZusHluaGgYtJZuCel0WkEQDHib0+LFizf6aWlPPPHEgLdILV26VPfee6+OPPLId/VjOeHjFfiEOuSQQzRz5kxdfvnlevbZZ3XkkUcqm81qwYIFuvPOO/Xd735XJ5xwQv9ngV9++eX62Mc+pmOOOUbPPPOMHnzwwQGBFxuSSqV03XXX6bjjjtN+++2nGTNmaMyYMXrxxRc1f/58PfTQQ5LU39Ced955Ouqoo5ROp3XiiSe+J/v4Vk899ZQuvfTSQY9PnTpVH/7wh9Xa2qrTTjtN5513noIg0E9+8pONLnpjx47VFVdcocWLF2vixIm644479Oyzz+qGG27o/+jLT3/60/rZz36mM888U4888ogOPPBA1Wo1vfjii/rZz36mhx56aJNvj3I/RnLPPffU1KlTNXnyZA0dOlRPPfWUfv7zn2/xSO9FixZp2rRpOvroo/XEE0/o1ltv1cknn6x99913i24HQHy77rqr5s6dq5NOOkm77bZbfxJrFEVatGiR5s6dq1QqZX284+67767x48fry1/+sl5//XU1Nzfrrrvu2uBvPC+//HIde+yxOuigg/SZz3xGa9as0TXXXKO99tprg+/JX182m9Xdd9+tww8/XFOmTNH06dN14IEHKpvNav78+Zo7d65aW1t12WWX6bbbblM6nR70kYbrTJs2TV//+td1++2360tf+tIGa44//ngdf/zxm92vLcFdA4488kjlcjkdd9xxmjlzprq7u/XDH/5QI0eO1PLlyweMOXnyZF133XW69NJLNWHCBI0cObL/j2LfiWOPPVZXXnmljj76aJ188slauXKlrr32Wk2YMGGDH7M5adIkHXXUUQM+RlKSZs+e/Y73BVvIVvjkG0T/+5FQ/+///b9N1p122mlRQ0PDRv/9hhtuiCZPnhzV1dVFTU1N0d577x1dcMEF0bJly/prarVaNHv27GjMmDFRXV1dNHXq1OjPf/7zoI82XP9jJNd57LHHoiOOOCJqamqKGhoaon322Se65ppr+v+9Wq1G5557bjRixIgoCIJBHym5JfdxY7SJj/361re+FUVRFD3++OPRBz/4waiuri4aO3ZsdMEFF0QPPfTQoGNe95FjTz31VPShD30oKhQK0U477RR9//vfH7TdcrkcXXHFFdFee+0V5fP5qLW1NZo8eXI0e/bsqLOzs7/unXyM5KWXXhodcMABUUtLS1RXVxftvvvu0WWXXdb/cZZRtPHrZN1HRK5/rjb0MZJ/+ctfohNOOCFqamqKWltbo3POOSfq6+vb7P4BeO+8/PLL0ec///lowoQJUaFQ6J8TzjzzzOjZZ58dULup9eMvf/lLdPjhh0eNjY3R8OHDo89+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",
      "text/plain": [
       "<Figure size 800x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAvAAAAGTCAYAAABOLiYTAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAATINJREFUeJzt3XmYXGWd9vH71NJVvSadkBWykYUlYdE4qCxJZIdo8J2RDIIawqBBNnEuRNBXSFhElGGRVUYmqBBRNkVeHMSRTQQdBAIEkS0RCIHs3em1uuo87x+Z9NDpTnIfTMATv5/r4rpI9a+fsz/nVyeVuqMQQhAAAACAVMi83ysAAAAAwEcDDwAAAKQIDTwAAACQIjTwAAAAQIrQwAMAAAApQgMPAAAApAgNPAAAAJAiNPAAAABAitDAAwAAAClCA4/3zdy5cxVFkVauXLnVxjz++OM1evTorTbepowePVrHH398asYFAADbDxr4vxFRFFn/Pfjgg+/rek6bNk2TJk16X9cBAADg71nu/V4BrPejH/2ox59/+MMf6v777+/1+m677fZerhY24c9//rMyGd7/AgCA9x4N/N+Iz3zmMz3+/Pjjj+v+++/v9frG2traVFNTsy1XDX0oFApbrGltbVVtbe17sDYAAODvCY8QU2TDx1f++Mc/asqUKaqpqdHXvvY1Ses/gjN37txev9PXZ6rXrl2rM844QyNGjFChUNC4ceN0ySWXKI7jrbKezzzzjI4//njtvPPOKhaLGjp0qE444QStWrWqz/qVK1dq5syZamho0MCBA/WlL31JHR0dvepuvvlmTZ48WdXV1RowYICOOeYYvf7661tcn2XLlumFF15QV1fXFmsvvfRS7bvvvho4cKCqq6s1efJk3X777b3qNt6vN910k6Io0kMPPaSTTz5ZgwcP1k477STpfz/r/8ILL1jb+U6rV6/WmWeeqT322EN1dXVqaGjQEUccoYULF/aoe/DBBxVFkX7605/qoosu0k477aRisaiDDjpIL7/8cq9xf//73+vwww9Xv379VFNTo6lTp+rRRx/d4v4BAADvP57Ap8yqVat0xBFH6JhjjtFnPvMZDRkyJNHvt7W1aerUqVq6dKnmzJmjkSNH6ne/+53OOeccLVu2TFdcccVfvY7333+/Xn31Vc2ePVtDhw7VokWLdMMNN2jRokV6/PHHFUVRj/qZM2dq9OjRuvjii/X444/ru9/9rtasWaMf/vCH3TUXXXSRvvGNb2jmzJk68cQTtWLFCl111VWaMmWKnnrqKfXv33+T63POOefoBz/4gRYvXrzFf+B65ZVXasaMGTruuONUKpV066236uijj9Y999yj6dOnb3HbTz75ZA0aNEjnnnuuWltbE2/nxl599VX97Gc/09FHH60xY8bo7bff1ve+9z1NnTpVzz//vIYPH96j/lvf+pYymYzOPPNMNTU16dvf/raOO+44/f73v++u+c1vfqMjjjhCkydP1nnnnadMJqP58+frwAMP1COPPKJ99tlni9sJAADeRwF/k0455ZSw8eGZOnVqkBSuv/76XvWSwnnnndfr9VGjRoVZs2Z1//mCCy4ItbW14cUXX+xRd/bZZ4dsNhtee+21za7X1KlTw8SJEzdb09bW1uu1H//4x0FSePjhh7tfO++884KkMGPGjB61J598cpAUFi5cGEIIYcmSJSGbzYaLLrqoR92zzz4bcrlcj9dnzZoVRo0a1aNu1qxZQVJYvHjxZte7r3UvlUph0qRJ4cADD+zx+sb7df78+UFS2H///UO5XO5R625nX+N2dHSESqXS4/cWL14cCoVCOP/887tfe+CBB4KksNtuu4XOzs7u16+88sogKTz77LMhhBDiOA7jx48Phx12WIjjuMd2jxkzJhxyyCGb2z0AAOBvAB+hSZlCoaDZs2e/69+/7bbbdMABB6ixsVErV67s/u/ggw9WpVLRww8//FevY3V1dff/d3R0aOXKlfrIRz4iSXryySd71Z9yyik9/nzaaadJku69915J0p133qk4jjVz5swe6zx06FCNHz9eDzzwwGbX56abblIIwfp6yXeu+5o1a9TU1KQDDjigz/Xuy+c//3lls9k+f7al7exLoVDo/seylUpFq1atUl1dnXbZZZc+12n27Nmqqqrq/vMBBxwgaf2TfEl6+umn9dJLL+nYY4/VqlWruvdla2urDjroID388MNb7aNUAABg2+AjNCmz44479mjQknrppZf0zDPPaNCgQX3+fPny5e967A1Wr16tefPm6dZbb+01XlNTU6/68ePH9/jz2LFjlclktGTJku51DiH0qtsgn8//1eu8wT333KMLL7xQTz/9tDo7O7tf3/hjP5syZsyYTf5sS9vZlziOdeWVV+raa6/V4sWLValUun82cODAXvUjR47s8efGxkZJ69+MSOv3pSTNmjVrk8tsamrq/j0AAPC3hwY+Zd75hNjxzoZPWt8QHnLIITrrrLP6rJ8wYcK7XrcNZs6cqd/97nf6yle+or333lt1dXWK41iHH3649XR342Y5jmNFUaRf/vKXfT7drqur+6vXWZIeeeQRzZgxQ1OmTNG1116rYcOGKZ/Pa/78+VqwYIE1RpLj47wp+OY3v6lvfOMbOuGEE3TBBRdowIABymQyOuOMM/rcl5t6+h9CkKTu3/nOd76jvffeu8/arbU/AQDAtkEDv51obGzU2rVre7xWKpW0bNmyHq+NHTtWLS0tOvjgg7fJeqxZs0b/9V//pXnz5uncc8/tfn3Dk9++vPTSSz2eXL/88suK47j7Iy9jx45VCEFjxozZKm8wNuWOO+5QsVjUfffd1+NrIufPn79Vxt/Sdvbl9ttv18c+9jHdeOONPV5fu3atdthhh8TrMHbsWElSQ0PDNjsHAADAtsVn4LcTY8eO7fX59RtuuKHXE/iZM2fqscce03333ddrjLVr16pcLv9V67HhCfCGJ74bbO7bba655poef77qqqskSUcccYQk6R//8R+VzWY1b968XuOGEDb59ZQbuF8jmc1mFUVRj322ZMkS/exnP9vs77m2tJ2bWqeNt/m2227T0qVL39U6TJ48WWPHjtWll16qlpaWXj9fsWLFuxoXAAC8d3gCv5048cQTddJJJ+mf/umfdMghh2jhwoW67777ej2l/cpXvqK7775bH//4x3X88cdr8uTJam1t1bPPPqvbb79dS5Ys2eKT3RUrVujCCy/s9fqYMWN03HHHacqUKfr2t7+trq4u7bjjjvrVr36lxYsXb3K8xYsXa8aMGTr88MP12GOP6eabb9axxx6rvfbaS9L6NycXXnihzjnnHC1ZskSf/OQnVV9fr8WLF+uuu+7SF77wBZ155pmbHN/9Gsnp06frsssu0+GHH65jjz1Wy5cv1zXXXKNx48bpmWee2ew+cWxpO/vy8Y9/XOeff75mz56tfffdV88++6xuueUW7bzzzu9qHTKZjL7//e/riCOO0MSJEzV79mztuOOOWrp0qR544AE1NDToF7/4xbvdRAAA8B6ggd9OfP7zn9fixYt144036j//8z91wAEH6P7779dBBx3Uo66mpkYPPfSQvvnNb+q2227TD3/4QzU0NGjChAmaN2+e+vXrt8VlLV++XN/4xjd6vX7QQQfpuOOO04IFC3TaaafpmmuuUQhBhx56qH75y1/2+s7yDX7yk5/o3HPP1dlnn61cLqdTTz1V3/nOd3rUnH322ZowYYIuv/xyzZs3T5I0YsQIHXrooZoxY4a7mzbrwAMP1I033qhvfetbOuOMMzRmzBhdcsklWrJkyVZp4J3t3NjXvvY1tba2asGCBfrJT36iD37wg/p//+//6eyzz37X6zFt2jQ99thjuuCCC3T11VerpaVFQ4cO1Yc//GHNmTPnXY8LAADeG1HY+O/nAWxVc+fO1bx587RixYp39bl1AACAd+Iz8AAAAECK0MADAAAAKUIDDwAAAKQIn4EHAAAAUoQn8AAAAECK0MADAAAAKUID/3ds9OjROv7447v//OCDDyqKIj344IPv2zptbON1fC9MmzZNkyZN2qpjbuvtOP7441VXV2fVRlGkuXPnbrN1AbD9O/744zcbjAdg26KBf5/cdNNNiqKo+79isagJEybo1FNP1dtvv/1+r14i99577/veEEZRpFNPPfV9XQcA2NYWL16sU089VRMmTFBNTY1qamq0++6765RTTtkqgXPbSnNzs+bNm6e99tpLdXV1qq6u1qRJk/TVr35Vb775Zp+/M3PmTEVRpK9+9at9/nzDQ6coinTzzTf3WbPffvspiiLrocyWHoS8F/eZa6+9VjfddNM2XQa2DySxvs/OP/98jRkzRh0dHfrtb3+r6667Tvfee6+ee+451dTUvKfrMmXKFLW3t6uqqirR791777265ppr3vcmHp729nblclz6QNrcc889+ud//mflcjkdd9xx2muvvZTJZPTCCy/ozjvv1HXXXafFixdr1KhR7/eq9vDqq6/q4IMP1muvvaajjz5aX/jCF1RVVaVnnnlGN954o+666y69+OKLPX6nublZv/jFLzR69Gj9+Mc/1re+9S1FUdTn+MViUQsWLNBnPvOZHq8vWbJEv/vd71QsFrfZtm1t1157rXbYYYf3/G+ekT7cxd9nRxxxhD70oQ9Jkk488UQNHDhQl112mX7+85/r05/+dJ+/09raqtra2q2+LplMJlUTHd4djjGQPq+88oqOOeYYjRo1Sv/1X/+lYcOG9fj5JZdcomuvvVaZzOb/Yn1b3T82pVwu6x//8R/19ttv68EHH9T+++/f4+cXXXSRLrnkkl6/d8cdd6hSqeg//uM/dOCBB+rhhx/W1KlT+1zGkUceqbvvvlsrV67skXa9YMECDRkyROPHj9eaNWu27oYB7zM+QvM35sADD5S0/q9Jpf/9K71XXnlFRx55pOrr63XcccdJkuI41hVXXKGJEyeqWCxqyJAhmjNnTq+JKoSgCy+8UDvttJNqamr0sY99TIsWLeq17E19Bv73v/+9jjzySDU2Nqq2tlZ77rmnrrzyyu71u+aaaySpx0eCNtja6/jX+PnPf67p06dr+PDhKhQKGjt2rC644AJVKpU+6//4xz9q3333VXV1tcaMGaPrr7++V01nZ6fOO+88jRs3ToVCQSNGjNBZZ52lzs7OLa7PK6+8oldeeWWLdV1dXZo3b57Gjx+vYrGogQMHav/999f999/fq3bp0qX65Cc/qbq6Og0aNEhnnnlmr+3b+DPwc+fOVRRFeuGFFzRz5kw1NDRo4MCB+tKXvqSOjo4trh+Abe/b3/62WltbNX/+/F7NuyTlcjmdfvrpGjFiRPdrm7t/PPLIIzr66KM1cuTI7rnry1/+strb23uN/bOf/UyTJk1SsVjUpEmTdNddd9nrfccdd2jhwoX6+te/3qt5l6SGhgZddNFFvV6/5ZZbdMghh+hjH/uYdtttN91yyy2bXMZRRx2lQqGg2267rcfrCxYs0MyZM5XNZu31Tcq9B8yfP18HHnigBg8erEKhoN13313XXXddj5rRo0dr0aJFeuihh7rvpdOmTZP0vx+7/e1vf6vTTz9dgwYNUv/+/TVnzhyVSiWtXbtWn/vc59TY2KjGxkadddZZ2vhbwi+99FLtu+++GjhwoKqrqzV58mTdfvvtvbZpw0eFbrnlFu2yyy4qFouaPHmyHn744a278/BX4Qn835gNDd3AgQO7XyuXyzrssMO0//7769JLL+3+aM2cOXN00003afbs2Tr99NO1ePFiXX311Xrqqaf06KOPKp/PS5LOPfdcXXjhhTryyCN15JFH6sknn9Shhx6qUqm0xfW5//779fGPf1zDhg3Tl770JQ0dOlR/+tOfdM899+hLX/qS5syZozfffFP333+/fvSjH/X6/fdiHV033XST6urq9K//+q+qq6vTb37zG5177rlqbm7Wd77znR61a9as0ZFHHqmZM2fq05/+tH7605/qi1/8oqqqqnTCCSdIWv/mZMaMGfrtb3+rL3zhC9ptt9307LPP6vLLL9eLL76on/3sZ5tdn4MOOkjS+r/m3Zy5c+fq4osv1oknnqh99tlHzc3NeuKJJ/Tkk0/qkEMO6a6rVCo67LDD9OEPf1iXXnqpfv3rX+vf/u3fNHbsWH3xi1/c4v6ZOXOmRo8erYsvvliPP/64vvvd72rNmjX64Q9/uMXfBbBt3XPPPRo3bpw+/OEPJ/q9Td0/brvtNrW1temLX/yiBg4cqD/84Q+66qqr9MYbb/RohH/1q1/pn/7pn7T77rvr4osv1qpVqzR79mzttNNO1vLvvvtuSdJnP/tZe53ffPNNPfDAA/rBD34gSfr0pz+tyy+/XFdffXWfH/GsqanRUUcdpR//+Mfdc93ChQu1aNEiff/730/8bwNWrlxp1SW5B1x33XWaOHGiZsyYoVwup1/84hc6+eSTFcexTjnlFEnSFVdcodNOO011dXX6+te/LkkaMmRIj2WedtppGjp0qObNm6fHH39cN9xwg/r376/f/e53GjlypL75zW/q3nvv1Xe+8x1NmjRJn/vc57p/98orr9SMGTN03HHHqVQq6dZbb9XRRx+te+65R9OnT++xnIceekg/+clPdPrpp6tQKOjaa6/V4Ycfrj/84Q9b/Use8C4FvC/mz58fJIVf//rXYcWKFeH1118Pt956axg4cGCorq4Ob7zxRgghhFmzZgVJ4eyzz+7x+4888kiQFG655ZYer//nf/5nj9eXL18eqqqqwvTp00Mcx911X/va14KkMGvWrO7XHnjggSApPPDAAyGEEMrlchgzZkwYNWpUWLNmTY/lvHOsU045JfR1Km2LddwUSeGUU07ZbE1bW1uv1+bMmRNqampCR0dH92tTp04NksK//du/db/W2dkZ9t577zB48OBQKpVCCCH86Ec/CplMJjzyyCM9xrz++uuDpPDoo492vzZq1Khe2zFq1KgwatSoLW7bXnvtFaZPn77Zmg3nyfnnn9/j9Q984ANh8uTJPV6TFM4777zuP5933nlBUpgxY0aPupNPPjlICgsXLtziOgLYdpqamoKk8MlPfrLXz9asWRNWrFjR/d8757lN3T9C6Hs+vPjii0MUReEvf/lL92t77713GDZsWFi7dm33a7/61a+CJGv++sAHPhD69eu3xbp3uvTSS0N1dXVobm4OIYTw4osvBknhrrvu6lG34Z512223hXvuuSdEURRee+21EEIIX/nKV8LOO+8cQlg/p0+cOHGLy92wvzb33zvvM0nuAX3t78MOO6x7HTeYOHFimDp1aq/aDT3DYYcd1uM++dGPfjREURROOumk7tfK5XLYaaedeo2z8TqUSqUwadKkcOCBB/Z4fcO2PvHEE92v/eUvfwnFYjH8n//zf3qtG94ffITmfXbwwQdr0KBBGjFihI455hjV1dXprrvu0o477tijbuMnqLfddpv69eunQw45RCtXruz+b/Lkyaqrq9MDDzwgSfr1r3+tUqmk0047rcdHW84444wtrttTTz2lxYsX64wzzlD//v17/GxT/5jovV7HJKqrq7v/f926dVq5cqUOOOAAtbW16YUXXuhRm8vlNGfOnO4/V1VVac6cOVq+fLn++Mc/dm/fbrvtpl133bXH9m34GNSG7duUJUuWbPHpuyT1799fixYt0ksvvbTF2pNOOqnHnw844AC9+uqrW/w9Sd1PgTY47bTTJK3/R8oA3j/Nzc2S1Oc3pEybNk2DBg3q/m/DRxrfqa+/gXvnfNja2qqVK1dq3333VQhBTz31lCRp2bJlevrppzVr1iz169evu/6QQw7R7rvvbq97fX29VbvBLbfcounTp3f/3vjx4zV58uTNfozm0EMP1YABA3TrrbcqhKBbb711k/+ObHOKxaLuv//+Pv/bWJJ7wDv3d1NTk1auXKmpU6fq1VdfVVNTk71+//Iv/9LjPvnhD39YIQT9y7/8S/dr2WxWH/rQh3rN/e9chzVr1qipqUkHHHCAnnzyyV7L+ehHP6rJkyd3/3nkyJE66qijdN99923yY6d4b/ERmvfZNddcowkTJiiXy2nIkCHaZZddev0jpFwu1+uvK1966SU1NTVp8ODBfY67fPlySdJf/vIXSesnwHcaNGiQGhsbN7tuGz7O827/uuy9WMckFi1apP/7f/+vfvOb33TfEDfYeAIdPnx4r3/oNWHCBEnrG++PfOQjeumll/SnP/1JgwYN6nN5G7bvr3X++efrqKOO0oQJEzRp0iQdfvjh+uxnP6s999yzR12xWOy1Lo2NjfY/3tp4/48dO1aZTMZ6kwFg29nQyLa0tPT62fe+9z2tW7dOb7/9dq9vYZH6vn9I0muvvaZzzz1Xd999d685YsN8uKm5WZJ22WWXHo3fihUrejR2dXV1qqurU0NDg/0QQZL+9Kc/6amnntLnPvc5vfzyy92vT5s2Tddcc42am5vV0NDQ6/fy+byOPvpoLViwQPvss49ef/11HXvssfZyN8hmszr44IOt2iT3gEcffVTnnXeeHnvsMbW1tfWoa2pq6vEGaXNGjhzZ488bfu+d//Zhw+sbH9d77rlHF154oZ5++uken9Hv64FcX8d8woQJamtr04oVKzR06FBrfbHt0MC/z/bZZ5/ub6HZlEKh0Kupj+NYgwcP3uQTiU1NKO+lv6V1XLt2raZOnaqGhgadf/75Gjt2rIrFop588kl99atfVRzHiceM41h77LGHLrvssj5/vvGE+m5NmTJFr7zyin7+85/rV7/6lb7//e/r8ssv1/XXX68TTzyxu25r/0Mt529ZAGx7/fr107Bhw/Tcc8/1+tmGz8Rv6o12X/ePSqWiQw45RKtXr9ZXv/pV7brrrqqtrdXSpUt1/PHHv6v58B/+4R+6G35JOu+88zR37lztuuuueuqpp/T6669bc+KG73P/8pe/rC9/+cu9fn7HHXdo9uzZff7uscceq+uvv15z587VXnvtZf8twbvl3gNeeeUVHXTQQdp111112WWXacSIEaqqqtK9996ryy+/PNH+3tQ839fr4R3/iPWRRx7RjBkzNGXKFF177bUaNmyY8vm85s+frwULFtjLx98OGviUGjt2rH79619rv/326/HXYhvb8H3AL730knbeeefu11esWLHFJ7Njx46VJD333HObfSKxqUbvvVhH14MPPqhVq1bpzjvv1JQpU7pf3/BtPxt78803e33d2obvKd6QPjh27FgtXLhQBx100DZvdgcMGKDZs2dr9uzZamlp0ZQpUzR37tweDfxf66WXXtKYMWO6//zyyy8rjmPSFoG/AdOnT9f3v/99/eEPf9A+++zzV4317LPP6sUXX9QPfvCDHv/IceOPibxzbt7Yn//85x5/vuWWW3p8g82GufwTn/iEfvzjH+vmm2/WOeecs9n1CiFowYIF+tjHPqaTTz65188vuOAC3XLLLZts4Pfff3+NHDlSDz74YJ9fTbm1ufeAX/ziF+rs7NTdd9/d4wl6Xx+z3Fb3kjvuuEPFYlH33XefCoVC9+vz58/vs76vY/7iiy+qpqbmb+IBIfgaydSaOXOmKpWKLrjggl4/K5fLWrt2raT1n7HP5/O66qqrerwbv+KKK7a4jA9+8IMaM2aMrrjiiu7xNnjnWBua3I1r3ot1dG14OvHO8Uulkq699to+68vlsr73ve/1qP3e976nQYMGdX8ucObMmVq6dKn+/d//vdfvt7e3q7W1dbPr5H6N5KpVq3r8ua6uTuPGjbO+qjKJjT87e9VVV0lan1UA4P111llnqaamRieccEKfad1ho68M3Jy+5sMQQvfXA28wbNgw7b333vrBD37Q42OG999/v55//vketfvtt58OPvjg7v82NPCf+tSntMcee+iiiy7SY4891mtd1q1b1/2NK48++qiWLFmi2bNn61Of+lSv//75n/9ZDzzwwCaTW6Mo0ne/+12dd955ib715t1y7wF97e+mpqY+m+fa2tpe99KtIZvNKoqiHh9zWrJkySa/Le2xxx7r8RGp119/XT//+c916KGHbtOv5YSPJ/ApNXXqVM2ZM0cXX3yxnn76aR166KHK5/N66aWXdNttt+nKK6/Upz71qe7vAr/44ov18Y9/XEceeaSeeuop/fKXv+wReNGXTCaj6667Tp/4xCe09957a/bs2Ro2bJheeOEFLVq0SPfdd58kdTe0p59+ug477DBls1kdc8wx78k6vtMTTzyhCy+8sNfr06ZN07777qvGxkbNmjVLp59+uqIo0o9+9KNN3vSGDx+uSy65REuWLNGECRP0k5/8RE8//bRuuOGG7q++/OxnP6uf/vSnOumkk/TAAw9ov/32U6VS0QsvvKCf/vSnuu+++zb78Sj3ayR33313TZs2TZMnT9aAAQP0xBNP6Pbbb9/qkd6LFy/WjBkzdPjhh+uxxx7TzTffrGOPPVZ77bXXVl0OgOTGjx+vBQsW6NOf/rR22WWX7iTWEIIWL16sBQsWKJPJWF/vuOuuu2rs2LE688wztXTpUjU0NOiOO+7o8288L774Yk2fPl3777+/TjjhBK1evVpXXXWVJk6c2Odn8jeWz+d155136uCDD9aUKVM0c+ZM7bfffsrn81q0aJEWLFigxsZGXXTRRbrllluUzWZ7faXhBjNmzNDXv/513XrrrfrXf/3XPmuOOuooHXXUUVtcr63BvQcceuihqqqq0ic+8QnNmTNHLS0t+vd//3cNHjxYy5Yt6zHm5MmTdd111+nCCy/UuHHjNHjw4O5/FPvXmD59ui677DIdfvjhOvbYY7V8+XJdc801GjduXJ9fszlp0iQddthhPb5GUpLmzZv3V68LtpL34ZtvEP73K6H++7//e7N1s2bNCrW1tZv8+Q033BAmT54cqqurQ319fdhjjz3CWWedFd58883umkqlEubNmxeGDRsWqqurw7Rp08Jzzz3X66sNN/4ayQ1++9vfhkMOOSTU19eH2trasOeee4arrrqq++flcjmcdtppYdCgQSGKol5fKbk113FTtJmv/brgggtCCCE8+uij4SMf+Uiorq4Ow4cPD2eddVa47777em3zhq8ce+KJJ8JHP/rRUCwWw6hRo8LVV1/da7mlUilccsklYeLEiaFQKITGxsYwefLkMG/evNDU1NRd99d8jeSFF14Y9tlnn9C/f/9QXV0ddt1113DRRRd1f51lCJs+TzZ8ReTG+6qvr5F8/vnnw6c+9alQX18fGhsbw6mnnhra29u3uH4A3jsvv/xy+OIXvxjGjRsXisVi95xw0kknhaeffrpH7ebuH88//3w4+OCDQ11dXdhhhx3C5z//+bBw4cIgKcyfP79H7R133BF22223UCgUwu677x7uvPPOMGvWLGv+2mDNmjXh3HPPDXvssUeoqakJxWIxTJo0KZxzzjlh2bJloVQqhYEDB4YDDjhgs+OMGTMmfOADHwgh9Pwayc1J8jWSm7vfqo+vK3bvAXfffXfYc889Q7FYDKNHjw6XXHJJ+I//+I8gKSxevLi77q233grTp08P9fX1QVL3V0FuqmfYMH+vWLFii9ty4403hvHjx4dCoRB23XXXMH/+/E3eI0455ZRw8803d9d/4AMf6NUb4P0VhZDg790AbHfmzp2refPmacWKFYn+xgMAsP2JokinnHKKrr766vd7VbAZfAYeAAAASBEaeAAAACBFaOABAACAFOEz8AAAAECK8AQeAAAASBEaeAAAACBFaOABAACAFLGTWL9/Y9+R832p22GCVVedrbLHbKivs+rWdVa2XPQ/WptXbbnof2QysVUXy/8nBbmM//6pOlew6orZBOG6GXNdI3/IBJuvSmweqwRjxu6Y8o9VLufv00zGi5iOoiQ71bc+R8uoM89nKdk+dSXZ/kLBO/erMl6dJCn4tVGVd0zbVv3JHnPq4Z+ya9PiyicvsGuragZadfnIj2wvFMz7SbnDH7NzuV3bEDVbdbXy6iSpX6ndri2s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",
      "text/plain": [
       "<Figure size 800x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAvAAAAGTCAYAAABOLiYTAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAT/BJREFUeJzt3XecnQWZ/v/r9Dp9Jpn0hBQSCMWNFYQgXSLguhJpa0BZQRGUFUF0BbI0UVdxqbK6gFRlgRURF1FBBGFdpIeWQHqdmUxvpz2/P/xmfgyTwDVIe+Ln/Xrx0jlzz32e89R7npw5VyQIgkAAAAAAQiH6Ti8AAAAAAB8DPAAAABAiDPAAAABAiDDAAwAAACHCAA8AAACECAM8AAAAECIM8AAAAECIMMADAAAAIcIADwAAAIQIAzxC7dxzz1UkElFra+ub1vO4447T1KlT3/DP9/T06IQTTlBzc7MikYi+/OUvv2nLBgAAEH+nFwBvnkgkYtXdd9992meffd7ahXkN++yzj1pbW/XMM8+8Y8vwVrrwwgt17bXX6pvf/KamT5+uOXPmvNOLBAAAtiMM8NuR66+/ftjXP/nJT3TvvfeOeJyB8q31u9/9Th/84Ad1zjnnvNOLAgAAtkMM8NuRY489dtjXjzzyiO69994Rj79aX1+fstnsW7lof1M2bdqknXba6XXrBgYGlEwmFY3yTjYAAOBjcvgbs88++2ju3Ln685//rL333lvZbFZf//rXJf3lLTjnnnvuiJ+ZOnWqjjvuuGGPdXR06Mtf/rImTZqkVCqlGTNm6OKLL1alUnlTlvOpp57Scccdpx122EHpdFrNzc36zGc+o7a2tq3Wt7a2auHChaqurlZDQ4O+9KUvaWBgYETdDTfcoHnz5imTyai+vl5HHnmkVq9e/brLs379ej3//PMqFovbrLn//vsViUS0fPly/fKXv1QkElEkEtGKFSuGvnfLLbfoX/7lXzRhwgRls1l1dXVJkm699dah5WpsbNSxxx6rtWvXjniOW2+9VTvttJPS6bTmzp2rO+64469+zz4AAAgX7sD/DWpra9NHP/pRHXnkkTr22GM1duzYUf18X1+f5s+fr7Vr1+rEE0/U5MmT9cc//lFnnXWW1q9fr0suueSvXsZ7771XL7/8so4//ng1NzdryZIluvrqq7VkyRI98sgjI97vv3DhQk2dOlUXXXSRHnnkEf37v/+72tvb9ZOf/GSo5oILLtA3v/lNLVy4UCeccIJaWlp06aWXau+999bjjz+u2trabS7PWWedpeuuu07Lly/f5rA8Z84cXX/99TrttNM0ceJEfeUrX5EkNTU1acWKFZKk8847T8lkUqeffroGBweVTCZ17bXX6vjjj9f73vc+XXTRRdq4caN+8IMf6KGHHhq2XL/85S/1qU99Srvssosuuugitbe367Of/awmTJjwhtczAAAIoQDbrZNPPjl49SaeP39+ICm46qqrRtRLCs4555wRj0+ZMiVYtGjR0NfnnXdekMvlghdffHFY3de+9rUgFosFq1ates3lmj9/frDzzju/Zk1fX9+Ix26++eZAUvDAAw8MPXbOOecEkoLDDjtsWO0XvvCFQFLw5JNPBkEQBCtWrAhisVhwwQUXDKt7+umng3g8PuzxRYsWBVOmTBlWt2jRokBSsHz58tdc7iD4y/pasGDBsMfuu+++QFKwww47DHtthUIhGDNmTDB37tygv79/6PG77rorkBScffbZQ4/tsssuwcSJE4Pu7u6hx+6///5A0ojlBQAA2y/eQvM3KJVK6fjjj3/DP3/rrbdqr732Ul1dnVpbW4f+23///VUul/XAAw/81cuYyWSG/v/AwIBaW1v1wQ9+UJL02GOPjag/+eSTh319yimnSJLuvvtuSdLtt9+uSqWihQsXDlvm5uZmzZw5U/fdd99rLs+1116rIAj+6reqLFq0aNhre/TRR7Vp0yZ94QtfUDqdHnp8wYIFmj17tn75y19KktatW6enn35an/70p5XP54fq5s+fr1122eWvWiYAABAuvIXmb9CECROUTCbf8M8vXbpUTz31lJqamrb6/U2bNr3h3lts3rxZixcv1i233DKiX2dn54j6mTNnDvt6+vTpikajQ29dWbp0qYIgGFG3RSKR+KuX2TFt2rRhX69cuVKStOOOO46onT17th588MFhdTNmzBhRN2PGjK3+UgMAALZPDPB/g155B9hRLpeHfV2pVHTAAQfojDPO2Gr9rFmz3vCybbFw4UL98Y9/1Fe/+lXtvvvuyufzqlQqOvjgg60/lH31e+QrlYoikYh+9atfKRaLjah/5V3tt9Jo1z0AAMCrMcBjSF1dnTo6OoY9VigUtH79+mGPTZ8+XT09Pdp///3fkuVob2/Xb3/7Wy1evFhnn3320ONLly7d5s8sXbp02N3tZcuWqVKpDL3lZfr06QqCQNOmTXtTfsF4s0yZMkWS9MILL2jfffcd9r0XXnhh6Ptb/nfZsmUjemztMQAAsP3iPfAYMn369BHvX7/66qtH3IFfuHChHn74Yd1zzz0jenR0dKhUKv1Vy7HlDnkQBMMef61Pt7n88suHfX3ppZdKkj760Y9Kkj7xiU8oFotp8eLFI/oGQbDNj6fcwvkYyTfive99r8aMGaOrrrpKg4ODQ4//6le/0nPPPacFCxZIksaPH6+5c+fqJz/5iXp6eobqfv/73+vpp59+U5cJAAC8u3EHHkNOOOEEnXTSSfqHf/gHHXDAAXryySd1zz33qLGxcVjdV7/6Vd1555362Mc+puOOO07z5s1Tb2+vnn76af3Xf/2XVqxYMeJnXq2lpUXnn3/+iMenTZumY445Rnvvvbe+/e1vq1gsasKECfr1r3+t5cuXb7Pf8uXLddhhh+nggw/Www8/rBtuuEFHH320dtttN0l/+eXk/PPP11lnnaUVK1bo4x//uKqqqrR8+XLdcccd+tznPqfTTz99m/2dj5F8IxKJhC6++GIdf/zxmj9/vo466qihj5GcOnWqTjvttKHaCy+8UIcffrj23HNPHX/88Wpvb9dll12muXPnDhvqAQDA9o0BHkP+6Z/+ScuXL9ePf/xj/c///I/22msv3Xvvvdpvv/2G1WWzWf3+97/XhRdeqFtvvVU/+clPVF1drVmzZmnx4sWqqal53efatGmTvvnNb454fL/99tMxxxyjm266Saeccoouv/xyBUGgAw88UL/61a80fvz4rfb76U9/qrPPPltf+9rXFI/H9cUvflHf+c53htV87Wtf06xZs/T9739fixcvliRNmjRJBx54oA477DB3Nb3pjjvuOGWzWX3rW9/SmWeeqVwup7//+7/XxRdfPOyz6Q899FDdfPPNOvfcc/W1r31NM2fO1LXXXqvrrrtOS5YseceWHwAAvL0iwavfTwAgVHbffXc1NTXp3nvvfacXBQAAvA14DzwQEsViccTfF9x///168skntc8++7wzCwUAAN523IEHQmLFihXaf//9deyxx2r8+PF6/vnnddVVV6mmpkbPPPOMGhoa3ulFBAAAbwPeAw+ERF1dnebNm6cf/ehHamlpUS6X04IFC/Stb32L4R0AgL8h3IEHAAAAQoT3wAMAAAAhwgAPAAAAhAgD/N+4qVOn6rjjjhv6+v7771ckEtH999//ji3Tq716Gd8O++yzj+bOnfum9vxrX8fSpUt14IEHqqamRpFIRP/93//9pi0bAIzGcccd96aG2gEYHQb4d9C1116rSCQy9F86ndasWbP0xS9+URs3bnynF29U7r77bp177rnv6DJEIhF98YtffEeX4a20aNEiPf3007rgggt0/fXX673vfe87vUgA3mbLly/XF7/4Rc2aNUvZbFbZbFY77bSTTj75ZD311FPv9OJtU1dXlxYvXqzddttN+XxemUxGc+fO1Zlnnql169Zt9WcWLlyoSCSiM888c6vf33LDKRKJ6IYbbthqzZ577qlIJGLdkDnuuOOUz+e3+f234xpzxRVX6Nprr31LnwPbBz6F5l3gX//1XzVt2jQNDAzowQcf1JVXXqm7775bzzzzjLLZ7Nu6LHvvvbf6+/uVTCZH9XN33323Lr/88nd8iN9e9ff36+GHH9Y3vvGN7fqXFADbdtddd+lTn/qU4vG4jjnmGO22226KRqN6/vnndfvtt+vKK6/U8uXLNWXKlHd6UYd5+eWXtf/++2vVqlU64ogj9LnPfU7JZFJPPfWUfvzjH+uOO+7Qiy++OOxnurq69Itf/EJTp07VzTffrG9961uKRCJb7Z9Op3XTTTfp2GOPHfb4ihUr9Mc//lHpdPote21vtiuuuEKNjY1v+786I3wY4N8FPvrRjw7dTT3hhBPU0NCg733ve/r5z3+uo446aqs/09vbq1wu96YvSzQaDdXJ7m9FS0uLJKm2tvZ1a9+qfQPAO+ell17SkUceqSlTpui3v/2txo0bN+z7F198sa644gpFo6/9D+tv9/mhVCrpE5/4hDZu3Kj7779fH/7wh4d9/4ILLtDFF1884uduu+02lctl/ed//qf23XdfPfDAA5o/f/5Wn+OQQw7RnXfeqdbWVjU2Ng49ftNNN2ns2LGaOXOm2tvb39wXBrzDeAvNu9C+++4r6S//VCr9//+s99JLL+mQQw5RVVWVjjnmGElSpVLRJZdcop133lnpdFpjx47ViSeeOOJkFQSBzj//fE2cOFHZbFYf+chHtGTJkhHPva33wP/v//6vDjnkENXV1SmXy2nXXXfVD37wg6Hlu/zyyyVp2FuCtnizl/Gv8fOf/1wLFizQ+PHjlUqlNH36dJ133nkql8tbrf/zn/+sPfbYQ5lMRtOmTdNVV101omZwcFDnnHOOZsyYoVQqpUmTJumMM87Q4ODg6y7PSy+9pJdeeuk1a84999yhO2pf/epXFYlEht57eu655yoSiejZZ5/V0Ucfrbq6uqELZKlU0nnnnafp06crlUpp6tSp+vrXvz5iuSqVis4991yNHz9+aL0/++yz78jfHgDYum9/+9vq7e3VNddcM2J4l6R4PK5TTz1VkyZNGnrsta4df/jDH3TEEUdo8uTJQ+et0047Tf39/SN6//d//7fmzp2rdDqtuXPn6o477rCX+7bbbtOTTz6pb3zjGyOGd0mqrq7WBRdcMOLxG2+8UQcccIA+8pGPaM6cObrxxhu3+RyHH364UqmUbr311mGP33TTTVq4cKFisZi9vKPlnv+vueYa7bvvvhozZoxSqZR22mknXXnllcNqpk6dqiVLluj3v//90HV0S8r2lrfcPvjggzr11FPV1NSk2tpanXjiiSoUCuro6NCnP/1p1dXVqa6uTmeccYZe/Snh3/3ud7XHHnuooaFBmUxG8+bN03/913+NeE1b3ip04403ascdd1Q6nda8efP0wAMPvLkrD38V7sC/C20Z6F4ZzlMqlXTQQQfpwx/+sL773e8OvbXmxBNP1LXXXqvjjz9ep556qpYvX67LLrtMjz/+uB566CElEglJ0tlnn63zzz9fhxxyiA455BA99thjOvDAA1UoFF53ee6991597GMf07hx4/SlL31Jzc3Neu6553TXXXfpS1/6kk488UStW7dO9957r66//voRP/92LKPr2muvVT6f1z//8z8rn8/rd7/7nc4++2x1dXXpO9/5zrDa9vZ2HXLIIVq4cKGOOuoo/exnP9PnP/95JZNJfeYzn5H0l+H3sMMO04MPPqjPfe5zmjNnjp5++ml9//vf14svvvi6f2i63377SfrLP/Vuyyc+8QnV1tbqtNNO01FHHaVDDjlkxPs0jzjiCM2cOVMXXnjh0En7hBNO0HXXXadPfvKT+spXvqL//d//1UUXXaTnnntu2AX4rLPO0re//W0deuihOuigg/Tkk0/qoIMO0sDAgLtaAbzF7rrrLs2YMUMf+MAHRvVz27p23Hrrrerr69PnP/95NTQ06E9/+pMuvfRSrVmzZtgg/Otf/1r/8A//oJ122kkXXXSR2tradPzxx2vixInW8995552SpH/8x3+0l3ndunW67777dN1110mSjjrqKH3/+9/XZZddttW3d2azWR1++OG6+eab9fnPf16S9OSTT2rJkiX60Y9+NOq/DWhtbbXqRnP+v/LKK7XzzjvrsMMOUzwe1y9+8Qt94QtfUKVS0cknnyxJuuSSS3TKKacon8/rG9/4hiRp7Nixw57zlFNOUXNzsxYvXqxHHnlEV199tWpra/XHP/5RkydP1oUXXqi7775b3/nOdzR37lx9+tOfHvrZH/zgBzrssMN0zDHHqFAo6JZbbtERRxyhu+66SwsWLBj2PL///e/105/+VKeeeqpSqZSuuOIKHXzwwfrTn/70pn/AA96gAO+Ya665JpAU/OY3vwlaWlqC1atXB7fcckvQ0NAQZDKZYM2aNUEQBMGiRYsCScHXvva1YT//hz/8IZAU3HjjjcMe/5//+Z9hj2/atClIJpPBggULgkqlMlT39a9/PZAULFq0aOix++67L5AU3HfffUEQBEGpVAqmTZsWTJkyJWhvbx/2PK/sdfLJJwdb253eimXcFknBySef/Jo1fX19Ix478cQTg2w2GwwMDAw9Nn/+/EBS8G//9m9Djw0ODga77757MGbMmKBQKARBEATXX399EI1Ggz/84Q/Del511VWBpOChhx4aemzKlCkjXseUKVOCKVOmvO5rW758eSAp+M53vjPs8XPOOSeQFBx11FHDHn/iiScCScEJJ5ww7PHTTz89kBT87ne/C4IgCDZs2BDE4/Hg4x//+LC6c889117vAN5anZ2dgaQRx2kQBEF7e3vQ0tIy9N8rz3HbunYEwdbPhRdddFEQiUSClStXDj22++67B+PGjQs6OjqGHvv1r38dSLLOXe95z3uCmpqa1617pe9+97tBJpMJurq6giAIghdffDGQFNxxxx3D6rZcr2699dbgrrvuCiKRSLBq1aogCILgq1/9arDDDjsEQfCX8/nOO+/8us+7ZX291n+vvMaM5vy/tfV90EEHDS3jFjvvvHMwf/78EbVb5oWDDjpo2DXyQx/6UBCJRIKTTjpp6LFSqRRMnDhxRJ9XL0OhUAjmzp0b7LvvvsMe3/JaH3300aHHVq5cGaTT6eDv//7vRywb3hm8heZdYP/991dTU5MmTZqkI488Uvl8XnfccYcmTJgwrG7LnYUtbr31VtXU1OiAAw5Qa2vr0H/z5s1TPp/XfffdJ0n6zW9+o0KhoFNOOWXYW1u+/OUvv+6yPf7441q+fLm+/OUvj3j/9bb+oOjtXsbRyGQyQ/+/u7tbra2t2muvvdTX16fnn39+WG08HteJJ5449HUymdSJJ56oTZs26c9//vPQ65szZ45mz5497PVteRvUlte3LStWrHjNu++uk046adjXd999tyTpn//5n4c9/pWvfEWS9Mtf/lKS9Nvf/lalUklf+MIXhtWdcsopf/UyAXhzdHV1SdJWPyFln332UVNT09B/W97O+EqvvnZIw8+Fvb29am1t1R577KEgCPT4449LktavX68nnnhCixYtUk1NzVD9AQccoJ122sle9qqqKqt2ixtvvFELFiwY+rmZM2dq3rx5r/k2mgMPPFD19fW65ZZbFASBbrnllm3+DdlrSafTuvfee7f636uN5vz/yvXd2dmp1tZWzZ8/Xy+//LI6Ozvt5fvsZz877Br5gQ98QEEQ6LOf/ezQY7FYTO9973v18ssvD/vZVy5De3u7Ojs7tddee+mxxx4b8Twf+tCHNG/evKGvJ0+erMMPP1z33HPPNt9yircXb6F5F7j88ss1a9YsxeNxjR07VjvuuOOIP0SKx+Mj/sly6dKl6uzs1JgxY7bad9OmTZKklStXSvrLSfCVmpqaVFdX95rLtuXtPG/0n8zejmUcjSVLluhf/uVf9Lvf/W7oorjFq0+i48ePH/HHXrNmzZL0l8H7gx/8oJYuXarnnntOTU1NW32+La/vrTZt2rRhX69cuVLRaFQzZswY9nhzc7Nqa2uH1veW/311XX19/Zu63gG8cVsG2Z6enhHf++EPf6ju7m5t3LhxxKewSFu/dkjSqlWrdPbZZ+vOO+8c8fdIW86F2zovS9KOO+44bPBraWkZNtjl83nl83lVV1ePGCRfy3PPPafHH39cn/70p7Vs2bKhx/fZZx9dfvnl6urqUnV19YifSyQSOuKII3TTTTfp/e9/v1avXq2jjz7aft4tYrGY9t9/f6t2NOf/hx56SOecc44efvhh9fX1Davr7Owc9gvSa5k8efKwr7f83Cv/9mHL46/ernfddZfOP/98PfHEE8Peo7+1m3Fb2+azZs1SX1+fWlpa1NzcbC0v3joM8O8C73//+1/3M71TqdSIob5SqWjMmDHbvCuxrZPK2+ndtIwdHR2aP3++qqur9a//+q+aPn260um0HnvsMZ155pmqVCqj7lmpVLTLLrvoe9/73la//+qT6lvllXdWXsn5VxIA7241NTUaN26cnnnmmRHf2/Ke+G39S97Wrh3lclkHHHCANm/erDPPPFOzZ89WLpfT2rVrddxxx72hc+H73ve+oYFfks455xyde+65mj17th5//HGtXr3aOh9u+Tz30047TaeddtqI79922206/vjjt/qzRx99tK666iqde+652m233ex/JXij3PP/Sy+9pP3220+zZ8/W9773PU2aNEnJZFJ33323vv/9749qfW/rD3K39njwij9i/cMf/qDDDjtMe++9t6644gqNGzdOiURC11xzjW666Sb7+fHuwQAfYtOnT9dvfvMb7bnnntsc4CQNfYLJ0qVLtcMOOww93tLS8rofrTV9+nRJ0jPPPPOadyW2NSi+Hcvouv/++9XW1qbbb79de++999DjWz7t59XWrVs34iPXtnxW8ZZPgZk+fbqefPJJ7bfffu+qYXnKlCmqVCpaunSp5syZM/T4xo0b1dHRMbS+t/zvsmXLht3Fb2tr42PXgHeRBQsW6Ec/+pH+9Kc/6f3vf/9f1evpp5/Wiy++qOuuu27YHzm++m0irzwvv9oLL7ww7Osbb7xx2CfYbDmPH3roobr55pt1ww036KyzznrN5QqCQDfddJM+8pGPjHhbnySdd955uvHGG7c5wH/4wx/W5MmTdf/992/1oynfbO75/xe/+IUGBwd15513DruDvrW3WL5V15HbbrtN6XRa99xzj1Kp1NDj11xzzVbrt7bNX3zxRWWz2XfFzUHwMZKhtnDhQpXLZZ133nkjvlcqldTR0SHpL++xTyQSuvTSS4f9Rn7JJZe87nP83d/9naZNm6ZLLrlkqN8Wr+y1Zch9dc3bsYyuLXcoXtm/UCjoiiuu2Gp9qVTSD3/4w2G1P/zhD9XU1DT03sCFCxdq7dq1+o//+I8RP9/f36/e3t7XXCbnYyTfiEMOOUTSyPW35U7Rlk8c2G+//RSPx0d8nNlll132pi8TgDfujDPOUDab1Wc+85mtJnUHr/rIwNeytXNhEARDHw28xbhx47T77rvruuuuG/YWw3vvvVfPPvvssNo999xT+++//9B/Wwb4T37yk9pll110wQUX6OGHHx6xLN3d3UOfuPLQQw9pxYoVOv744/XJT35yxH+f+tSndN99920zuTUSiejf//3fdc4554zqU2/eKPf8v7X13dnZudXhOZfLjbiOvhlisZgikciwtzmtWLFim5+U9vDDDw97i9Tq1av185//XAceeOBb+rGc8HEHPsTmz5+vE088URdddJGeeOIJHXjggUokElq6dKluvfVW/eAHP9AnP/lJNTU16fTTT9dFF12kj33sYzrkkEP0+OOP61e/+tWw0IutiUajuvLKK3XooYdq99131/HHH69x48bp+eef15IlS3TPPfdI0tBAe+qpp+qggw5SLBbTkUce+bYs4ys9+uijOv/880c8vs8++2iPPfZQXV2dFi1apFNPPVWRSETXX3/9Ni9848eP18UXX6wVK1Zo1qxZ+ulPf6onnnhCV1999dBHX/7jP/6jfvazn+mkk07Sfffdpz333FPlclnPP/+8fvazn+mee+55zbdHOR8j+UbstttuWrRoka6++uqhtw796U9/0nXXXaePf/zj+shHPiLpLx9R9qUvfUn/9m//psMOO0wHH3ywnnzyyaH1/m76VwXgb9nMmTN100036aijjtKOO+44lMQaBIGWL1+um266SdFo1Pp4x9mzZ2v69Ok6/fTTtXbtWlVXV+u2227b6r+6XXTRRVqwYIE+/OEP6zOf+Yw2b96sSy+9VDvvvPNW35P/aolEQrfffrv2339/7b333lq4cKH23HNPJRIJLVmyRDfddJPq6up0wQUX6MYbb1QsFhvxkYZbHHbYYfrGN76hW265ZcQf6G9x+OGH6/DDD3/d5XozuOf/Aw88UMlkUoceeqhOPPFE9fT06D/+4z80ZswYrV+/fljPefPm6corr9T555+vGTNmaMyYMUN/FPvXWLBggb73ve/p4IMP1tFHH61Nmzbp8ssv14wZM7b6MZtz587VQQcdNOxjJCVp8eLFf/Wy4E3yDnzyDf6fLR8L9X//93+vWbdo0aIgl8tt8/tXX311MG/evCCTyQRVVVXBLrvsEpxxxhnBunXrhmrK5XKwePHiYNy4cUEmkwn22Wef4Jlnnhnx0Yav/hjJLR588MHggAMOCKqqqoJcLhfsuuuuwaWXXjr0/VKpFJxyyilBU1NTEIlERnyk5Ju5jNui1/jor/POOy8IgiB46KGHgg9+8INBJpMJxo8fH5xxxhnBPffcM+I1b/nYsUcf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",
      "text/plain": [
       "<Figure size 800x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化Grad-CAM\n",
    "print(\"生成Grad-CAM可视化结果...\")\n",
    "visualize_grad_cam(model, test_loader)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
